2012-01-23 22 views
3

我的目標是爲具有特定擴展名的所有文件建立索引並將其存儲到index.txt中。我得到了所有正確的結果,但沒有得到「文件」到新的生產線,這是我的代碼的快照:在Java中打印文件中的新行

OutputStream f0 = new FileOutputStream("index.txt"); 
    String ind[] = f.list(only); // logic for getting only relevant files 
     for(int i=0;i<ind.length;i++) 
     { 
      File n = new File(path + "/" +ind[i]); 
       System.out.println(ind[i]+ " is a " +exten +" file"); 
       ind[i]+="\n";   // doesnt work  
       f0.write(ind[i].getBytes()); // here i am writing the filenames        
     }   

是由於getBytes()構造函數俯瞰「/ N」 ?請告訴我應該怎麼做。我想在每次退出for循環時插入一個新行。

一個主要編輯:當我用記事本++或寫字板打開文件時,我得到所需的結果,但是當我用記事本打開文件時,我得到的結果在同一行。請解釋一下吧!

+0

任何人都可以解釋異常與我得到的各種結果相同的文件? – Purushottam

+1

記事本只能讀取一個類型的行分隔符。這就是爲什麼,這似乎是一條線。 – Jaxedin

+0

@Purushottam「_任何人都可以解釋異常與我得到的同一個文件的各種結果嗎?_」請看看我的答案下面澄清關於跨平臺的換行/ carriageretns的問題。 –

回答

5

嘗試寫:

System.getProperty("line.separator") 

,而不是\ n

2

而不是使用FileOutputStream中我會使用一個PrintWriter。

PrintWriter out = new PrintWriter("index.txt"); 
String ind[] = f.list(only); // logic for getting only relevant files 
for(int i=0;i<ind.length;i++) 
{ 
    File n = new File(path + "/" +ind[i]); 
    System.out.println(ind[i]+ " is a " +exten +" file"); 
    out.println(ind[i]); 
} 
1

是否有任何理由在Java中處理如此低級別的I/O?首先你應該使用Writers而不是OutputStreams。

,然後如果你使用的PrintWriter你可以做廢除了一塊的getBytes:

PrintWriter的F0 =的新PrintWriter(新的FileWriter( 「index.txt」));

然後...

f0.print(ind [i]);

終於到了你的問題,外循環簡單

f0.println();

1

試試這個,

FileWriter.write("\r\n"); 
+0

這顯然只在Windows平臺上纔是正確的,當然不是在Mac或* nix上想要的。 – Voo

2

這裏有一個假設缺失。

  1. 如果您認爲您的文本文件應該有微軟Windows行分隔符(專供Windows平臺),那麼你應該使用\r\n
  2. 如果你認爲你的文本文件應該有類似於Unix的行分隔符(用於GNU/Linux,AIX,Xenix,Mac OS X,FreeBSD等),那麼你應該使用\n
  3. 如果你認爲你的文本文件應該有Mac oldschool行分隔符(意味着Mac OS版本9,Apple II家族,OS-9等),那麼你應該使用\r
  4. 如果你認爲你的文本文件應該有平臺類型的行分隔符,你的程序是運行,那麼你應該使用System.getProperty("line.separator")(或打印新行.println())。