【问题标题】:finding path from directory present in jar从 jar 中存在的目录中查找路径
【发布时间】:2013-01-31 07:15:37
【问题描述】:

我正在尝试使用一个 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 上进行迭代,我需要从中获取文件的文件路径,但我没有获取文件路径。 所以我想知道我如何获取文件路径?

【问题讨论】:

    标签: java file


    【解决方案1】:

    您不能以File 对象的形式访问 JAR 中的文件,因为在 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();
    

    但正如我所说,首先使用流而不是文件对象会让您更加灵活。

    如果你真的不知道编译时目录中的所有文件,你might be interested in this answer to list contents

    【讨论】:

    • 我尝试了你的建议,但我从以下语句中得到空值 InputStream is = getClass().getResourceAsStream(myDirPath + fileName);是包含 null
    • myDirPathfileName 包含 / 以将它们彼此分开? myDirPath 是以 / 开头还是当前类的包中的目录?在this answer 上查看有关如何从 JAR 中读取的说明。
    • 谢谢斯蒂芬,我可以得到 InputStream 中的值。现在唯一的问题是这个“我的文件是一个 .owl 文件,我想使用该文件生成模型,所以我想要文件路径”所以我需要编写如下语句:Model timeModel = FileManager.get().loadModel(文件路径,ApplicationConstants.N3); filePath 是带有文件名的实际路径,我想要文件路径,问题是如何获取它?
    • 谢谢斯蒂芬。这很有帮助。
    猜你喜欢
    • 2013-11-24
    • 2017-07-14
    • 1970-01-01
    • 2010-11-21
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 2018-12-08
    相关资源
    最近更新 更多