2010-12-05 132 views
9

我试图读取特定包中的文本文件,但它返回无法找到。我可以读取它插入绝对路径,但我想读取它而不插入绝对路径。从特定的包中读取txt文件Java

String texto = "Utils/CEP/Cidades/" + estado + ".txt"; 
FileReader fr = new FileReader(texto); 
BufferedReader in = new BufferedReader(fr); 

我该怎么办?

感谢

+0

你是什么意思,“在一个特定的包装”?哪个包? – skaffman 2010-12-05 21:36:01

+0

这看起来像是复制到以下问题: http://stackoverflow.com/questions/4359876/how-to-load-reference-a-file-as-a-file-instance-from-the-classpath – 2010-12-05 22:06:09

回答

22

您可以使用

InputStream in = 
    getClass().getResourceAsStream("/Utils/CEP/Ciades/" + estado + ".txt"); 
Reader fr = new InputStreamReader(in, "utf-8"); 

几个图片的标题说明:不要在包名称中使用大写字母;使用你的变量的英文名称。这些都是公认的做法和惯例。

0

对于总的可移植性,可以考虑在地方使用文件分割符的正斜杠,但是,是的getResourceAsStream应该工作。请记住,如果你在eclipse中工作,你的类文件可能与你的工作目录相关,所以如果它只是在你的项目文件夹中,你应该有它的工作方式,而不是getResourceAsStream。或者,如果您要访问的资源位于源文件夹中,则每当您清理项目时都会将其复制到bin中,以便getResourceAsStream可以正常工作。

10

这可能有点晚,但这可能有助于其他许多人。这些方法访问现有的资源,在项目

获取资源形成默认的包从特定的软件包

// Getting Resource as file object 
File f = new File(getClass().getResource("/com/vivek/core/excludedir.properties").getFile()); 

// Getting resource as stream object 
InputStream in = getClass().getResourceAsStream("/com/vivek/core/excludedir.properties"); 

注意

// Getting Resource as file object 
File f = new File(getClass().getResource("/excludedir.properties").getFile()); 

// Getting resource as stream object 
InputStream in = getClass().getResourceAsStream("/excludedir.properties"); 

获取资源:的getclass( )是一个非静态函数,不能从静态上下文中调用。如果你想从静态环境呼叫使用

YourClassName.class.getResource("/com/vivek/core/excludedir.properties").getFile() 

希望这会有所帮助。干杯!!