Java加载外部CSV文件编译成Jar后不起作用

标签 java csv netbeans file-io jar

我正在使用 NetBeans 编写一个 Java 程序,该程序记录了黑白胶片的冲印过程。其中一个选项允许您手动设置时间,另一个选项允许您选择所选的胶片和显影剂,以从加载到数组中的 CSV 文件计算所需的时间。

已加载 3 个文件:filmdb.csv、masterdb.csv 和 usersettings.csv。前两个文件纯粹为了读取而加载,第三个文件被加载并且也可以写入以保存用户的默认设置。

所有3个文件都存储在项目目录中,并以与以下代码类似的方式加载并从main调用:

static String[] filmArray;
static int filmRows = 125;
int selectedDevTime;
int tempDevTime;
int minDevTime;
int secDevTime;
public int count = -1;

static void createFilmArray() {
    filmArray = new String[filmRows];

    Scanner scanLn = null;
    int Rowc = 0;
    int Row = 0;
    String InputLine = "";
    String filmFileName;

    filmFileName = "filmdb.csv";

    System.out.println("\n****** Setup Film Array ******");

    try {
        scanLn = new Scanner(new BufferedReader(new FileReader(filmFileName)));

        while (scanLn.hasNextLine()) {
            InputLine = scanLn.nextLine();
            filmArray [Rowc] = InputLine;
            Rowc++;
        }
    } catch (Exception e) {
        System.out.println(e);
    }        
}

当我按下 NetBeans 中的运行按钮时,一切正常,文件全部加载并存储到适当的数组中,但是当我将文件构建为 .jar 时,文件未加载,我尝试将 3 个文件复制到与 .jar 相同的目录以及将 3 个文件导入到 .jar 存档中,但没有什么乐趣。

文件应该放置在特定的位置,还是应该以不同的方式导入?

我不想从绝对目录加载它们,例如 Windows 用户可能将文件存储在 C:\users\somebody\devtimer\file.csv 中,而 Linux 用户可能将文件存储在 C:\users\somebody\devtimer\file.csv 中。文件存储在/home/somebody/devtimer/file.csv中。

干杯 吉姆

最佳答案

您的文件已打包到 *.jar 中 一旦文件位于 jar 中,您就无法使用路径将其作为文件访问(因为,如果您考虑一下,它不再是文件。它位于另一个文件(jar 文件)中)。

你需要做这样的事情:

InsputStream csvStream = this.getClass().getResourceAsStream("filmdb.csv");

然后您可以将此输入流传递给您的 csv 解析器。 但您将无法对该文件进行任何修改。您想要更改的任何文件都需要存储在 jar 之外。

对于文件路径,像new File("somename")这样的东西是相对于当前工作目录解析的。如果你想知道你的根在哪里,请尝试以下操作:

System.err.println(new File(".").getCanonicalPath());

这对应用程序执行时的工作目录非常敏感,而这又取决于它的执行方式等。

关于Java加载外部CSV文件编译成Jar后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24991507/

相关文章:

MySQL 和 HBase 优化的数据存储(1 TB)

java - 使用 boolean 值创建选项 >reserved<?

java - JSF (facelets) IDE 代码完成

java - 我的 Android 抽屉导航 Activity 发生了什么?

java - 由于特殊字符,从 Web 服务器检索到的数据无法显示

java - JFugue 解析 midi 文件并输出 .csv?

PHP 从 URL 中获取 CSV,加载到数组中,格式化

可以使用 Netbeans + PHPUnit 在远程服务器上进行 PHP 单元测试吗?

java - Spring Data Rest - 无法更新(PATCH)引用另一个实体的子实体列表

java - 以下 JAVA 代码遇到什么同步问题?