【问题标题】:Getting a file in class path在类路径中获取文件
【发布时间】:2013-07-17 23:39:36
【问题描述】:

我正在尝试使用类路径访问文件,如下所示:

String path = getClass().getProtectionDomain().getCodeSource()
            .getLocation().toString();
    File test = new File(path);
    File table = new File(test, "testFile.xlsx");

我这样做是因为我需要创建一个 Jar,如果它在同一个文件夹中,它将读取和写入该文件。

我收到此错误:

java.io.FileNotFoundException:  "myFilepath" (The filename, directory name, or volume label syntax is incorrect)

如果我将 myFilepath 复制并粘贴到文件浏览器中,它会显示我的文件。有人看到我做错了什么,或者我可以改进我的方法吗?

【问题讨论】:

  • 您需要澄清更多问题,添加更多上下文并解释意图,而不仅仅是需要完成的实际“事情”。 (否则我会否决你)
  • @DavidHofmann 我访问了一个 Excel 电子表格。我编辑了这个电子表格的内容。我将此电子表格的更改保存到原始文件中。此应用程序适用于非开发人员。他需要能够运行可执行文件,然后打开电子表格查看数据。这就是所有上下文,而不是向下/向上投票,我将非常感谢一些见解。
  • 所以你在 jar 中分发的 java swing 应用程序。该应用程序应在加载它的文件系统中打开一个文件,修改该文件并保存它。是这样吗?

标签: java file io


【解决方案1】:

与其尝试获取类路径名,不如创建一个 File 对象,然后使用 getAbsolutePath() 方法获取其绝对路径。这将给出运行代码的源文件的路径。

请尝试以下代码:-

 java.io.File f = new java.io.File("H");
        String path;
        path = f.getAbsolutePath();
        path = path.substring(0, (path.length() - f.getName().length()));
        f.deleteOnExit();

字符串路径将包含您的类文件目录路径。

【讨论】:

  • stackoverflow.com/questions/2837263/…这个方法我试过了,同样的错误。
  • 请尝试上面的代码,看看你是否得到了你的绝对类文件路径,没有带有“path”变量的类名。
  • 这把我带到了项目文件夹,该文件包含在 src/main/resources 中。将文件与 jar 放在同一文件夹中时,我将如何进行这项工作?
  • 请尝试通过连接添加带有此路径的 jar 文件夹名称,然后使用新目录,看看它是否有效。
  • 那么编译出来的class文件和jar文件一样,就到了class文件路径,jar文件在里面。
【解决方案2】:

您无法访问类路径中的文件,但可以从类路径中获取资源流并从中读取内容。你需要看这个答案https://stackoverflow.com/a/1464366/39998

【讨论】:

  • 如果我按照您的建议以这种方式访问​​文件: InputStream stream = Test.class.getResourceAsStream("/SomeTextFile.txt");然后如何创建 FileOutputSteam 来将更改写入此文件?
  • 通常你会在你的 jar 中读取一些文件的内容(这就是我们所说的资源)。之后你到底想做什么,修改jar里面的文件?
  • 执行程序后需要访问该文件。
猜你喜欢
  • 2016-11-19
  • 2014-07-24
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多