1

项目结构 项目结构

代码:

public class WriterXlsx {
    public WriterXlsx(String sfilename, List<RecordNameCode> records, List<Day> recordsDay, Integer fullTime) {
        String path = "res/" + sfilename + ".xlsx";
        URL resURL = getClass().getClassLoader().getResource(path);
        try (InputStream inputStream = resURL.openStream())
        {
            int lastUsedColumn = createListHead().size();
            XSSFWorkbook workBook = new XSSFWorkbook(inputStream);
            XSSFSheet sheet = workBook.getSheetAt(0);

            drawRecordHead(createListHead(),sheet);
            writeContent(2, records,sheet);
            createPlanForDay(recordsDay,fullTime,lastUsedColumn,sheet,workBook);

            try(FileOutputStream out = new FileOutputStream("C:\\Users\\student3\\"+sfilename+".xlsx"); ) {
            workBook.write(out);
            out.close();         }

        } catch (IOException e) {
            e.printStackTrace();
        }

程序将写入 SfileName 并从res\IDE(Intellij IDEA)中的文件读取,但它不能独立工作。我无法通过 .jar 存档启动程序。(可能找不到 res 目录)..

显现:

Manifest-Version: 1.0
Main-Class: workhere.Start

上课开始:

public class Start {
 public static void main(String[] args) {
        System.out.println("It's working");
        new Start().start(countDays);
        System.out.println("Work is finished");
    }
........
4

2 回答 2

0

您可以通过不同的方式进行测试,例如:

this.getClass().getResource(sfilename)

getResources 查找与包相关的资源。

this.getClass().getResource("/"+sfilename)

getResources 会将其视为绝对路径并简单地调用类加载器。

this.getClass().getClassLoader().getResource(sfilename)

您不能在 ClassLoader 路径中使用 / 的原因是因为所有 ClassLoader 路径都是绝对的,因此 / 不是路径中有效的第一个字符。

于 2013-09-12T14:03:39.297 回答
0

我想是因为你正在使用.getResource()Try

getClass().getClassLoader().getResourceAsStream(path);

代替

getClass().getClassLoader().getResource(path);

一旦文件被打包到一个 jar 中,它就不再是文件系统上的一个独立文件,它是一个独占的文件系统路径。只有一个文件,jar 和你的文件就是它的内容。

于 2013-09-12T13:54:52.080 回答