我为“Debian Linux”创建了一个 java 应用程序。现在我希望该应用程序读取放置在指定该应用程序的 jar 文件的目录中的文件。那么在 File Object 的参数中指定什么?
File fileToBeReaded = new File(...);
指定什么作为上述语句的参数以指定表示应用程序的 jar 文件所在路径的相对文件路径?
我为“Debian Linux”创建了一个 java 应用程序。现在我希望该应用程序读取放置在指定该应用程序的 jar 文件的目录中的文件。那么在 File Object 的参数中指定什么?
File fileToBeReaded = new File(...);
指定什么作为上述语句的参数以指定表示应用程序的 jar 文件所在路径的相对文件路径?
如果你知道文件名,当然很简单
new File("./myFileName")
如果您不知道名称,可以使用 File 对象的 list() 方法获取当前目录中的文件列表,然后选择您想要的文件。
您是在询问转义字符问题吗?
如果是这种情况,则使用正斜杠而不是反斜杠,例如
“C:/Users/You/Desktop/test.txt”
代替
"C:\Users\You\Desktop\test.txt"
使用相对路径java.io.File
完全依赖于当前工作目录。这与您执行 JAR 的方式不同。例如,如果您在/foo
其中执行 JAR,java -jar /bar/jar/Bar.jar
那么工作目录仍然是/foo
. 但是如果你cd
去/bar/jar
执行,java -jar Bar.jar
那么工作目录就是/bar/jar
.
如果您想要 JAR 所在的根路径,其中一种方法是:
File root = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());
这将返回 JAR 文件的根路径(即类路径根)。如果您将资源相对于类路径根目录放置,则可以按如下方式访问它:
File resource = new File(root, "filename.ext");
或者,您也可以只使用:
File resource = new File(Thread.currentThread().getContextClassLoader().getResource("filename.ext").toURI());
我认为这应该可以解决问题:
File starting = new File(System.getProperty("user.dir"));
File fileToBeRead = new File(starting,"my_file.txt");
这样,将在属性中搜索该文件,该user.dir
属性将是您应用程序的工作目录。
你可以让你的类加载器给你 jar 的位置:
getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
...但我建议将您要查找的文件放入 jar 文件中并将其作为资源 ( getClass().getResourceAsStream( "myFile.txt" )
) 读取。
在 IntelliJIDEA 上右键单击文件,然后复制绝对路径,然后在双引号中将路径粘贴为 filePath。例如它应该是这样的:
"C:\\Users\\NameOfTheComputerUser\\IdeaProjects\\NameOfTheProject\\YourSubFolders\\name-of-the-file.example"