2012-01-03 72 views
2

我试图创建一个URL来访问本地文件,像这样:的Java:getCodeBase()在非小程序应用

URL myURL = new URL(getCodeBase(), "somefile.txt"); 

但是,当它试图getCodeBase它抛出一个NullPointerException()。我很确定这背后的原因是因为这个代码所属的类文件不是一个小程序。有什么方法可以在不使用applet的情况下获得代码基础?我只想访问本地文件,而不必将实际目录放入(因为当其他人运行应用程序时,目录路径显然不会相同)。

+1

呃,为什么你的班级延长'Applet',如果它实际上不是一个小程序呢?这个代码在什么情况下运行?代码(应该是)执行的究竟是什么?目标文件(应该是)位于何处?它需要可写吗? – BalusC 2012-01-03 15:11:54

回答

4

我会用下面是相对于工作目录

URL myURL = new URL("file:somefile.txt"); 

URL myURL = new URL("file", "", "somefile.txt"); 

File file = new File("somefile.txt"); 
+1

但是当我这样做,程序运行,然后抛出java.net.MalformedURLException:没有协议:somefile.txt – Blackvein 2012-01-03 15:20:11

+0

对不起,它必须在名称的开头有'file:'来定义协议。 – 2012-01-03 15:27:21

+0

非常好!非常感谢。 – Blackvein 2012-01-03 17:53:11

1

你并不需要获得代码库。 如果文件驻留在类路径中(这包括部署类的路径),则可以访问类加载器方法getSystemResource

URL myURL = ClassLoader.getSystemResource("somefile.txt"); 
1

如果somefile.txt是只读的,把它放在一个罐子它是应用程序的运行时类路径上。使用访问它:

URL urlToText = this.getClass().getResource("/path/to/somefile.txt"); 

如果读/写:

  • 检查的user.home该文件已知子目录。
  • 如果不存在,就把它放在那里(从罐中提取它)。
  • 读取/写入已知路径的文件。
0

请参阅How to create a folder in Java发帖,其中问了非常类似的问题。

正如Tomas Narros上面所说,正确的方法是使用ClassLoader在Classpath中找到资源文件。传递给ClassLoader的路径与启动Java应用程序时设置的类路径相关。

如果您浏览上述链接,您会看到一些示例代码,其中显示了如何解析类路径中文件的路径。