我想編寫一個簡單的java程序來讀取文本文件,然後在檢測到空行時寫出一個新文件。我已經看過在文件中讀取的例子,但我不知道如何檢測空白行並輸出多個文本文件。Java讀入單個文件並寫出多個文件
fileIn.txt:
line1
line2
line3
fileOut1.txt:
line1
line2
fileOut2.txt:
line3
我想編寫一個簡單的java程序來讀取文本文件,然後在檢測到空行時寫出一個新文件。我已經看過在文件中讀取的例子,但我不知道如何檢測空白行並輸出多個文本文件。Java讀入單個文件並寫出多個文件
fileIn.txt:
line1
line2
line3
fileOut1.txt:
line1
line2
fileOut2.txt:
line3
萬一您的文件有特殊字符,也許你應該指定編碼。
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();
你可以檢測一個空字符串以找出一行是否爲空。例如:
if(str!=null && str.trim().length()==0)
或者你也可以做(如果使用JDK 1.6或更高版本)
if(str!=null && str.isEmpty())
您的兩個條件不相同。 'isEmpty()'只檢查長度,不會先前修改 –
@GuillaumePolet - 這是我的一個疏忽。還添加了空檢查! – CoolBeans
我不知道如何來檢測空白行..
if (line.trim().length==0) { // perform 'new File' behavior
..並輸出多個文本文件。
在循環中對單個文件執行什麼操作。
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寫入新文件。
像這樣的東西應該做的:
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();
}
這非常有幫助。謝謝!雖然我並不真正瞭解for循環。我習慣於(初始化;終止;增量)。爲什麼不是String line = null;並沒有增量? – yellavon
是可選的。你可以只有'for(;;)' –