2013-01-07 39 views
2

我想从我的.jar文件的根目录加载文本文件。我试过这样的:getResourceAsStream返回InputStream,但扫描器无法读取

InputStream is = getClass().getResourceAsStream("/infobook.txt"); 
Scanner scan = new Scanner(is); 
ArrayList<String> strings = new ArrayList<String>(); 
while(scan.hasNextLine()) 
{ 
    strings.add(scan.nextLine()); 
} 

我没有得到任何运行时异常,但是,没有行被添加到ArrayList。然后我尝试了一些像System.out.println(scan.nextLine());,我得到了一个java.util.NoSuchElementException: No line found例外。 现在我很困难,需要你的帮助。该文本文件有21行文字。 我将如何去从罐子里加载这个文本文件?

[编辑] 我也试着阅读这样的输入流:

InputStream is = getClass().getResourceAsStream("/infobook.txt"); 
BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
System.out.println(br.readLine()); 

给予以下错误:java.util.zip.ZipException: invalid stored block lengths

+0

您是否试过直接从'is'读取某些东西,而没有'scan'? – tcb

+0

我刚刚试过这个:http://pastebin.com/KaQzHGLs并得到这个错误:'java.util.zip.ZipException:无效的存储块长度'。我希望这是你的意思,“直接” – Nik

+0

谢谢大家回答我的问题,让我更接近答案。我刚刚更新了我的Java,现在相同的代码完美地工作。我不知道为什么:O – Nik

回答

0

如果您将来查看此内容 - 如果您在OSX上,请尝试更新您的Java。这对我有用,也可能适合你。否则,请尝试下面/上面的其他答案。

1

我会检查有没有在你的classpath文件(一个你不要期望)哪个是空的。尝试打印

// print where the file is found. 
System.out.println(getClass().getResource("/infobook.txt")); 
+0

这将返回:'jar:file:/Users/notro/Documents/Developments/java/fileio.jar!/ infobook.txt'。所以我认为这个文件存在:? – Nik

+0

如果您检查jar,该文件有多少个字节? –

+0

查找器显示2kb,所以2048bytes – Nik

0

我试图创建类似的场景,但所有的时间我都成功运行。但即使你提供了错误的文件名,它也会产生不同的异常。我的意思是扫描仪无法读取它

0

也许有一个字符集问题;明确地选择它。

Scanner scan = new Scanner(is, "Windows-1252"); 
+0

可悲的是这不起作用:(我也试过“UTF-8”,没有成功 – Nik

+0

也许是“UTF16LE”?但首先用7zip或WinZip查看/infobook.txt的jar文件。 –