Java 为什么在linux上存在FileNotFoundException时引发它
这是我第一次在linux上用Java访问文件时遇到这样的问题。这个问题就像标题所说的-Java 为什么在linux上存在FileNotFoundException时引发它,java,linux,file,Java,Linux,File,这是我第一次在linux上用Java访问文件时遇到这样的问题。这个问题就像标题所说的-FileNotFoundException是在文件实际存在时抛出的。此外,具有相同配置(props.txt文件)的应用程序在windows上运行时也应该如此。 让我提供一点控制台输出 datasu@dedi2392:~/netcrawler/dkpto$ ls -l total 20 -rwxrw-rw- 1 datasu datasu 114 Aug 7 15:53 autoupdate drwxr-xr
FileNotFoundException
是在文件实际存在时抛出的。此外,具有相同配置(props.txt文件)的应用程序在windows上运行时也应该如此。
让我提供一点控制台输出
datasu@dedi2392:~/netcrawler/dkpto$ ls -l
total 20
-rwxrw-rw- 1 datasu datasu 114 Aug 7 15:53 autoupdate
drwxr-xr-x 4 datasu datasu 4096 Aug 8 11:57 data
drwxr-xr-x 2 datasu datasu 4096 Aug 8 11:57 log
-rw-rw-rw- 1 datasu datasu 32 Aug 8 12:44 props.txt
-rwxrw-rw- 1 datasu datasu 126 Aug 8 12:55 propsUpdate
datasu@dedi2392:~/netcrawler/dkpto$ ./propsUpdate
Parent: /usr/home/datasu/netcrawler/dkpto
1# -> propsUpdate
2# -> autoupdate
3# -> props.txt
4# -> data
5# -> log
(No such file or directory)ava.io.FileNotFoundException: /usr/home/datasu/netcrawler/dkpto/props.txt
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(Unknown Source)
at netcrawler.Autoupdater.readProperties(Autoupdater.java:71)
at netcrawler.Autoupdater.start(Autoupdater.java:54)
at netcrawler.Autoupdater.main(Autoupdater.java:47)
datasu@dedi2392:~/netcrawler/dkpto$ java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
datasu@dedi2392:~/netcrawler/dkpto$
那么为什么
props.txt
文件实际存在时却找不到它呢?您的主文件夹真的是这个路径吗
/usr/home/datasu
/home/datasu
是它在linux上的正常位置
另外,请尝试将该行更改为:
properties.load(new FileInputStream(new File(args));
如果您将其称为
/propsUpdate./props.txt
,它将从当前工作目录工作。字符串“args”的结尾可能有一个非打印字符,如空格。在使用该变量之前,可以使用String.trim()删除这些字符。正确的路径真的是/usr/home/datasu/
?我不知道您的linux/unix版本,但它通常不是在/home/…
上吗?特别是因为您在第一行中显示了~/
,这是主目录。以下是PWD结果:datasu@dedi2392:~/netcrawler/dkpto$pwd->/usr/home/datasu/netcrawler/dkpto传递给readProperties
的args
的确切语法是什么?请尝试分离文件输入流
从new File
如下:File File File=new File(args)
File=File.getAbsoluteFile()
FileInputStream fis=new FileInputStream(File)
这样我们可以获得更多信息此路径是正确的,因为您可以启动应用程序,并且父文件夹也可以用这样的路径列出(检查生成它的代码)你提供的代码是第一个版本,我已经改变它来查看异常中文件的完整路径。请考虑路径是绝对的,所以工作目录不应该影响它。而且,路径是由java创建的,并且相同的代码在Windows上运行得很好。哇,这太蠢了。我有双重检查午餐SCRI。文件名中有一些空格等,但什么也没有。不过,修剪参数就成功了。谢谢你的建议。今天的教训:永远不要相信命令行传递的参数。有没有办法让VI,VIM显示不可打印的内容?你可以总是回显$arg | hextdump-C
有0x0D0A
序列等等s我猜carret返回正确吗?。当将args数组传递到main时,JVM不应该删除它吗?我以前从来没有遇到过这样的问题,0d
是回车,而0a
是换行符。@antoniosss我猜是您的属性。load
是在cr
和nl
后面追加的。
properties.load(new FileInputStream(new File(args));