我已经为“Debian Linux”创建了一个java应用程序。现在我希望该应用程序读取放置在指定该应用程序的 jar 文件的目录中的文件。那么在文件对象的参数中要指定什么?
File fileToBeReaded = new File(...);
上述语句的参数要指定什么来指定表示应用程序的 jar 文件放置路径的相对文件路径?
您是在问转义字符问题吗?
如果是这种情况,请使用正斜杠而不是像
那样的反斜杠“C:/Users/You/Desktop/test.txt”
而不是
“C:\Users\You\Desktop est.txt”
如果你知道文件名,当然很简单
new File("./myFileName")
如果您不知道名称,可以使用 File 对象的 list() 方法获取当前目录中的文件列表,然后选择您想要的文件。
在
java.io.File
中使用相对路径完全依赖于当前工作目录。这与执行 JAR 的方式不同。例如,如果您在 /foo
中并通过 java -jar /bar/jar/Bar.jar
执行 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"
路径 filePath = Paths.get("C:/Users/ganesh.parida/IdeaProjects/Walamart/src/com/cfg/recusion/example.txt"); // 使用 try-with-resources 确保 BufferedReader 自动关闭 尝试(BufferedReader bufferedReader = Files.newBufferedReader(filePath)){ 串线; // 读取并打印文件中的每一行 while ((line = bufferedReader.readLine()) != null) { System.out.println(行); } } catch (IOException e) { e.printStackTrace(); }