2013-01-07 69 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文件。 –