Java 相对于程序放置输入文件

Java 相对于程序放置输入文件,java,file-io,Java,File Io,在我的程序(简单的普通cosole应用程序)中,我正在读取一个文件a.txt。 现在我将把程序交给其他人,他应该能够运行它。我不希望文件路径像D:\a.txt那样固定,相反,它应该是相对于我的程序的。我应该把文件放在哪里,以便我的程序总能找到它 File file = new File("D:\aks.txt"); FileReader fileReader = new FileReader(file); BufferedReader bufferedReader = new BufferedR

在我的程序(简单的普通cosole应用程序)中,我正在读取一个文件a.txt。 现在我将把程序交给其他人,他应该能够运行它。我不希望文件路径像
D:\a.txt那样固定,
相反,它应该是相对于我的程序的。我应该把文件放在哪里,以便我的程序总能找到它

File file = new File("D:\aks.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
while( (str= bufferedReader.readLine())!=null){

}

当我硬编码像D:\a.txt这样的路径时,我的代码工作正常。将文件放入类路径(例如,包根或某个包)中,然后直接从类路径获取它,如下所示

InputStream input = getClass().getResourceAsStream("/a.txt");
// ... (continue with InputStreamReader and so on)
(确切路径取决于当前类的位置,以及是否以
/
作为前缀从包根开始,以及使用的类加载器)

将其打包并作为单个可执行JAR文件分发

另见:

    • @BalusC。你能详细解释一下吗?我的文件读取逻辑在我的帖子中给出了。你到底不明白哪一部分?使用
      缓冲读取器装饰
      输入流
      ?正是这样:
      reader=newbufferedreader(newinputstreamreader(输入,“UTF-8”)
      其中
      UTF-8
      是保存文件的字符集(可以省略,但这是个坏主意,同样是
      FileReader
      已经…)我想将源代码作为eclipse项目而不是jar提供。请建议您也这样做(将该文件放在类路径中),但是,将其作为Eclipse项目提供:)不需要将其打包为JAR,它只是防止最终用户(非Java开发人员)处理两个或多个松散的文件,这可能会使事情变得更糟;FileReader FileReader=新的FileReader(文件);BufferedReader BufferedReader=新的BufferedReader(文件阅读器);