我有一个简单的程序来检查我的文件是否存在。
我已经将文件复制到我的工作文件夹(使用我的java类)和c:。
在调用
时,代码会产生异常错误!new FileInputStream("1.xls")
new FileInputStream("1.xls")
使用Exception in thread "main" java.io.FileNotFoundException: 1.xls (Le fichier spécifié est introuvable)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at java.io.FileInputStream.<init>(FileInputStream.java:101)
at NewMain.main(NewMain.java:25)
调用它时,它可以正常工作!
这是我的代码
new FileInputStream("c:\\1.xls")
答案 0 :(得分:3)
我已将文件复制到我的工作文件夹下(使用我的java类)
此"1.xls"
是相对路径。在IDE中进行开发运行(从文件系统读取)时,路径将相对于工作目录(通常是项目根目录)。所以你的文件(给定相对路径)必须直接在项目根目录中,与src相同的级别
如果从命令运行并且工作目录是类所在的位置,并且该文件是该类所在的位置,那么这也应该与您正在使用的路径一起使用
使用新的FileInputStream(“c:\ 1.xls”)调用它时,它可以工作!
是的它应该有效。通常绝对路径应该工作
注意:您将文件放在Java类所在的位置,这告诉我您希望将该文件作为资源嵌入到项目中。在这种情况下,您不想要从文件系统中读取它。您应该通过url资源流读取它。您可以使用YourClass.class.getResourceAsStream("/path/to/file")
来返回InputStream
。所以你可以做类似
InputStream is = YourClass.class.getResourceAsStream("/path/to/file");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
您希望以这种方式执行此操作的原因是,一旦您将应用程序放在jar中,您从文件系统中读取的路径将不再有效,因此必须通过类路径读取它。使用上面的代码,/
很重要,因为它会将您带到类路径的根目录(从开发角度来说)从src开始。因此,如果您的文件位于src/resources/file.txt
,那么您将使用路径"/resources/file.txt"