我已经为“Debian Linux”创建了一个Java应用程序。现在我希望该应用程序读取放置在指定jar文件所在目录中的文件。那么在File对象的参数中应该指定什么?
File fileToBeReaded = new File(...);
如何指定参数来表示应用程序的jar文件所在的相对文件路径?
我已经为“Debian Linux”创建了一个Java应用程序。现在我希望该应用程序读取放置在指定jar文件所在目录中的文件。那么在File对象的参数中应该指定什么?
File fileToBeReaded = new File(...);
如何指定参数来表示应用程序的jar文件所在的相对文件路径?
你是在问转义字符的问题吗?
如果是这种情况,请使用正斜杠代替反斜杠,例如:
"C:/Users/You/Desktop/test.txt"
而不是
"C:\Users\You\Desktop\test.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
。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());
java.io.File
并不总是有效的。在给出答案之前,最好先告诉我们您需要这个File
以及为什么InputStream
不足够。例如,也许您需要这个文件用于某些第三方API,该API顽固地只接受File
而不是InputStream
,例如iText PDF。 - BalusCImage logo = Image.getInstance(path)
。 我看到有一个重载方法,它接受一个Inputstream
对象。但是,其他要求涉及加载字体文件(阿拉伯语)BaseFont baseNormalFont = BaseFont.createFont(PATH, BaseFont.IDENTITY_H, true);
我需要提供相同文件的路径。目前,我已将该文件放在Linux的单独配置文件夹下,然后给出了路径,例如System.getProperty(".....path to the conf folder") + further path to font file
。 - Farhan stands with PalestineFile 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" )
)。
在IntelliJ IDEA上右键单击文件,然后复制绝对路径,然后在双引号中粘贴路径作为filePath。 例如,它应该像这样:
"C:\\Users\\NameOfTheComputerUser\\IdeaProjects\\NameOfTheProject\\YourSubFolders\\name-of-the-file.example"