2012-05-10 85 views
1

我想編寫一個簡單的java程序來讀取文本文件,然後在檢測到空行時寫出一個新文件。我已經看過在文件中讀取的例子,但我不知道如何檢測空白行並輸出多個文本文件。Java讀入單個文件並寫出多個文件

fileIn.txt:

line1 
line2 

line3 

fileOut1.txt:

line1 
line2 

fileOut2.txt:

line3 

回答

1

萬一您的文件有特殊字符,也許你應該指定編碼

FileInputStream inputStream = new FileInputStream(new File("fileIn.txt")); 
InputStreamReader streamReader = new InputStreamReader(inputStream, "UTF-8"); 
BufferedReader reader = new BufferedReader(streamReader); 
int n = 0; 
PrintWriter out = new PrintWriter("fileOut" + ++n + ".txt", "UTF-8"); 
for (String line;(line = reader.readLine()) != null;) { 
    if (line.trim().isEmpty()) { 
     out.flush(); 
     out.close(); 
     out = new PrintWriter("file" + ++n + ".txt", "UTF-8"); 
    } else { 
     out.println(line); 
    } 
} 
out.flush(); 
out.close(); 
reader.close(); 
streamReader.close(); 
inputStream.close(); 
+0

這非常有幫助。謝謝!雖然我並不真正瞭解for循環。我習慣於(初始化;終止;增量)。爲什麼不是String line = null;並沒有增量? – yellavon

+0

是可選的。你可以只有'for(;;)' –

1

你可以檢測一個空字符串以找出一行是否爲空。例如:

if(str!=null && str.trim().length()==0) 

或者你也可以做(如果使用JDK 1.6或更高版本)

if(str!=null && str.isEmpty()) 
+0

您的兩個條件不相同。 'isEmpty()'只檢查長度,不會先前修改 –

+0

@GuillaumePolet - 這是我的一個疏忽。還添加了空檢查! – CoolBeans

1

我不知道如何來檢測空白行..

if (line.trim().length==0) { // perform 'new File' behavior 

..並輸出多個文本文件。

在循環中對單個文件執行什麼操作。

0
BufferedReader br = new BufferedReader(new FileReader("test.txt")); 
String line; 
int empty = 0; 
while ((line = br.readLine()) != null) { 
if (line.trim().isEmpty()) { 
// Line is empty 
} 
} 

上面的代碼片段,可以用來檢測線是空的,在這一點上,你可以創建FileWriter寫入新文件。

0

像這樣的東西應該做的:

public static void main(String[] args) throws Exception { 
     writeToMultipleFiles("src/main/resources/fileIn.txt", "src/main/resources/fileOut.txt"); 
    } 

    private static void writeToMultipleFiles(String fileIn, String fileOut) throws Exception {  

     BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(fileIn)))); 
     String line; 
     int counter = 0; 
     BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(fileOut)))); 

     while((line=br.readLine())!=null){ 

      if(line.trim().length()!=0){ 
       wr.write(line); 
       wr.write("\n"); 
      }else{ 
       wr.close(); 
       wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileOut + counter))); 
       wr.write(line); 
       wr.write("\n"); 
      } 
      counter++; 
     } 

     wr.close(); 
    } 
相關問題