2013-07-18 62 views
0

我想用来访问文件的类路径,如下所示:获取类路径下的文件

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

我这样做,因为我需要创建一个JAR,将读取和写入该文件,如果它位于同一个文件夹中。如果我复制并在文件浏览器粘贴myFilepath它带来了我的文件

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

我得到这个错误。任何人看到我做错了什么,或者我可以改进我的方法吗?

+0

您需要澄清更多问题,添加更多上下文并解释意图,而不仅仅是需要完成的实际“事情”。 (或我会downvote你) –

+0

@DavidHofmann我访问一个Excel电子表格。我编辑这个电子表格的内容。我将此电子表格的更改保存到原始文件。此应用程序适用于非开发人员。他需要能够运行可执行文件,然后打开电子表格来查看数据。这是所有的背景,而不是下/投票我非常感谢一些见解。 – PandaBearSoup

+0

所以你在一个jar中分发的java swing应用程序。该应用程序应该在加载它的文件系统中打开一个文件,修改该文件并保存它。是吗? –

回答

0

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

+1

如果我按照你的建议以这种方式访问​​文件: InputStream stream = Test.class.getResourceAsStream(“/ SomeTextFile.txt”); 我该如何创建一个FileOutputSteam来将更改写入此文件? – PandaBearSoup

+0

通常情况下,你阅读你的jar里面的一些文件的内容(这就是我们所说的资源)。之后你想要做什么,修改jar里面的文件? –

+0

执行程序后需要访问该文件。 – PandaBearSoup

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(); 

其中字符串路径则包含类文件的目录路径。

+0

http://stackoverflow.com/questions/2837263/how-do-i-get-the-directory-that-the-currently-executing-jar-file-is-in 我试过这种方法,得到了相同的错误。 – PandaBearSoup

+0

请尝试上面的代码,看看是否使用“路径”变量获取绝对类文件路径,而不使用类名称。 –

+1

这将我带到了项目文件夹中,该文件包含在src/main/resources中。如果将文件放在与jar相同的文件夹中,我将如何完成这项工作? – PandaBearSoup