【问题标题】:Jar can't access txt filesJar 无法访问 txt 文件
【发布时间】:2013-09-29 19:36:19
【问题描述】:

我对 Java 还是很陌生,但我遇到了一个我找不到解决方案的问题。 我编写了一个读取和写入 txt 文件的程序。当我在 NetBeans 中运行它时,它似乎工作正常,但是当我尝试运行 JAR 文件时,似乎程序无法访问 txt 文件。

我使用以下代码创建了文件:

File data = new File("src/data.txt");

它不起作用的原因可能是在文件的创建中吗?如果不是,那会是什么?

编辑: 随着程序的推进,文本文件正在被修改,如果我使用输入流,我将无法写入或更改 txt 文件,我是否应该更改管理数据的方式? (txt 文件)还是有办法让 jar 仍然可以访问 Txt 文件?

【问题讨论】:

    标签: java file netbeans jar


    【解决方案1】:

    此声明

    File data = new File("src/data.txt");
    

    依赖于文件系统中存在的文件。您需要将文件作为资源读取,以便 JAR 文件可以独立于文本文件运行

    InputStream input = getClass().getResourceAsStream("/path/to/data.txt");
    

    编辑:

    我建议使用将文本文件存储为“默认”的策略,然后当需要更改时,在“user.home”下写入一个新文件。在读取任何数据之前检查修改后的文件是否存在。

    【讨论】:

    • 只是出于兴趣:您能否解释一下您的解决方案与下面@shamimz 的答案之间的区别?我无法完全解决。
    • 我也刚刚意识到 OP 说他也在写入文件;所以他的问题肯定不仅仅是这个?听起来他确实想读/写磁盘上的文件,而他的问题是使用了可能不存在的src 目录...
    • @jazzbassrob 关于您的第一个问题,两者之间存在一些细微差别,例如此方法需要指定绝对路径,即需要前导 /。看到这个answer
    • @ShaharKazaz 仅使用文本文件 JAR 文件作为“默认”输入。查看更新
    【解决方案2】:

    方法一:在你创建jar并运行程序的地方,jar目录下没有名为“src”的文件夹。您应该在 jar 位置的同一目录中创建一个名为“src”的文件夹。这将允许文件写入操作。

    方法二:如果你想把txt文件保存在jar里,那么你可以使用:

    InputStream in = this.getClass().getClassLoader()
                                .getResourceAsStream("your package path/data.txt");
    

    一个完整的例子:

    package com.file.loader;
    
    public class Main {
        public static void main(String[] args) throws IOException {
        InputStream in = Main.class.getClassLoader().getResourceAsStream(
                "com/file/loader/data.txt");
        }
    }
    

    【讨论】:

    • 我曾尝试将文件放在不同的包中,但不起作用
    • 请发布您的包名和您提供的路径
    • 包名:storageData,文件名为data.txt。但是看看我编辑的内容。我想写入文件,而不仅仅是读取文件
    • @ShaharKazaz,查看我的更新答案,我认为这可能有助于您更好地理解。
    • 如果我错了,请纠正我,但您的建议只能让我选择从文件中读取而不是写入文件,对吗?
    猜你喜欢
    • 1970-01-01
    • 2018-10-17
    • 2013-04-25
    • 2021-12-20
    • 2020-08-24
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多