Java中的文件路径(Linux)

时间:2009-11-12 14:51:01

标签: java linux file-io

我创建了一个Java应用程序,它从conf.properties文件夹中的文件src/加载一些配置。

当我在Windows上运行此应用程序时,它运行正常。但是,当我尝试在Linux上运行它时,它会抛出此错误:

java.io.FileNotFoundException: src/conf.properties (No such file or directory)

9 个答案:

答案 0 :(得分:6)

如果您已将应用程序打包到jar文件中,而jar文件又包含属性文件,则应使用以下方法。这是分发Java程序时的标准方法。

URL pUrl = this.getClass().getResource("/path/in/jar/to/file.properties");

Properties p = new Properties();
p.load(pUrl.openStream());

路径中的/指向jar文件中的根目录。

答案 1 :(得分:5)

而不是

String PROP_FILENAME="src/conf.properties";

使用

String PROP_FILENAME="src" + File.separator + "conf.properties";

检查API以获取更多详细信息:http://java.sun.com/j2se/1.5.0/docs/api/java/io/File.html

答案 2 :(得分:4)

如果您的文件路径是相对的,我还会检查您当前的工作目录。您只需要创建File test = new File(".");,然后打印该文件的规范路径名称。

如果您使用System.getProperty()引用任何其他位置(如user.dir或其他类似的效果),您至少需要验证您用作相对根目录的目录是否在哪里认为是。

另外,如Myles所述,请检查用作文件路径分隔符的斜杠。虽然你总是可以使用“/”并且它可以工作。

如果你绝对引用这条路径,那么如果你做一些愚蠢的事情,比如硬编码这些地点,你就会在一个操作系统和另一个操作系统之间进行操作。

答案 3 :(得分:2)

您要做的是查看System.getProperties()并查找file.separator。静态File.pathSeprator也会让你到那里。

这将允许您为正在运行的任何系统构建本机路径。

(如果确实是那个问题。有时我想获取当前目录只是为了确保我认为我正在运行的目录是我的目录< / em>跑进去。)

答案 4 :(得分:2)

检查您的权限。例如,如果您(或者更确切地说,正在运行Java进程的用户)没有适当的权限来读取该文件,则会收到此错误消息。

这是典型的Windows - &gt; Linux迁移问题。从提示符运行时ls -l src/conf.properties显示什么?

此外,请检查大小写。 Windows不区分大小写,因此如果实际调用该文件,例如CONF.properties仍然可以找到它,而这两个文件在Linux上被认为是不同的文件。

答案 5 :(得分:1)

我会查看你的斜杠,windows经常使用'\'vs linux的'/'来表示文件路径。

编辑:由于您的路径看起来很好,可能文件权限或执行应用程序的路径不同?

答案 6 :(得分:1)

您应该检查应用程序的工作目录。也许它不是你假设的那个,这就是'src'目录不存在的原因。

对此进行简单检查是尝试绝对路径(仅用于调试!)。

答案 7 :(得分:1)

检查你的斜线和冒号 在我的情况下,我将我的PS1设置为以下值

PS1 ='\ n [\ e [1; 32m] $ SYSNAME(\ u)@ [\ e [1; 33m] \ w [\ e [1; 36m](\ d \ T)[!] \ e [0m] \ n \ $'

我试图从环境中读取。例如system.getenv

Java抛出异常

java.lang.IllegalArgumentException:格式错误的\ uxxxx编码

答案 8 :(得分:0)

尝试使用双斜杠,在JBoss中执行操作后,我经常不得不重构我的代码以使用双斜杠