旁边有一个可运行的 jar 文件和 data.txt
文件。 data.txt
可能会动态更改。程序需要读取该文件的内容。我第一次尝试打开文件失败:
new InputStreamReader(getClass().getResourceAsStream("/data.txt"), "UTF-8");
我找到了以下解决方案,但它很复杂并且有点尴尬:
new InputStreamReader(new FileInputStream(new File(getClass().getProtectionDomain().getCodeSource().getLocation().getPath()).getParent() + "/data.txt"), "UTF-8");
很难理解这里发生了什么。
我尝试了new File("./data.txt")
并且抛出了NPE。
如何以更易读的方式打开与 .jar 文件位于同一文件夹中的 data.txt
文件?
最佳答案
有两种方法可以定位类文件的基本路径,您可能会发现这两种方法都比必要的更复杂。
第一个是您问题中已有的内容:
URL url = MyClass.class.getProtectionDomain().getCodeSource().getLocation();
第二个是
URL url=MyClass.class.getResource("MyClass.class");
if(url.getProtocol().equals("jar"))
url=((JarURLConnection)url.openConnection()).getJarFileURL();
else url=MyClass.class.getResource("/");// for file: directories
从URL
您可以获得一个UTF-8
Reader
:
Reader r = Files.newBufferedReader(Paths.get(url.toURI()).resolveSibling("data.txt"));
关于java - 简化在 .jar 所在文件夹中打开文件的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25647597/