2012-05-10 8 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. Я привык к for (инициализация, завершение, приращение). Почему это не строка String = 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(); 
    }