我正在尝试使用一个jar文件,该文件本身是另一个Web项目中的Web应用程序。在我使用 eclipse 导出到 jar 功能创建的 jar 中,我存储了一个目录。要从我正在使用的该目录访问文件
BufferdReader tempDir = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(myDirPath),"UTF-8"));
// Then i iterate on tempDir
String line;
ArrayList<File> tempDirList = new ArrayList<File>();
int c = 0;
try {
while((line = tempDir.readLine())!= null)
{
File f = new File(line);
tempDirList.add(f);
c++;
}
} catch (IOException e)
{
e.printStackTrace();
}
现在在 tempDirList 上迭代时,当我尝试读取文件时,我需要从中获取文件的文件路径,但我没有得到文件路径。所以我想知道我如何获取文件路径?
您不能将 JAR 中的文件作为File
对象进行访问,因为在 Web 容器中,它们可能不会解压缩(因此没有文件)。您只能像以前一样通过流访问它们。
getClass().getResourceAsStream(myDirPath + "/file1.txt");
如果您确实需要File
对象(大多数情况下很容易避免这种情况),请将文件复制到临时文件中,然后您可以访问这些文件。
File tmp = File.createTemp("prefix", ".tmp");
tmp.deleteOnExit();
InputStream is = getClass().getResourceAsStream(myDirPath + "/file1.txt");
OutputStream os = new FileOutputStream(tmp);
ByteStreams.copy(is, os);
os.close();
is.close();
但正如我所说,首先使用流而不是文件对象会让你更加灵活。
如果您在编译时真的不知道目录中的所有文件,您可能会对这个列出内容的答案感兴趣。