Java читает в одном файле и записывает несколько файлов

Я хочу написать простую java-программу для чтения в текстовом файле, а затем записывать новый файл всякий раз, когда обнаруживается пустая строка. Я видел примеры для чтения в файлах, но я не знаю, как обнаружить пустую строку и вывести несколько текстовых файлов.

fileIn.txt:

line1
line2

line3

fileOut1.txt:

line1
line2

файлOut2.txt:

line3

person yellavon    schedule 10.05.2012    source источник


Ответы (5)


На тот случай, если в вашем файле есть специальные символы, возможно, вам следует указать кодировку.

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();
person Paul Vargas    schedule 10.05.2012
comment
Это было очень полезно. Спасибо! Я не очень понимаю цикл for. Я привык к for(инициализация; завершение; приращение). Почему это не String line = null; а увеличения нет? - person yellavon; 14.05.2012
comment
Не являются обязательными. Вы можете иметь только for(;;) - person Paul Vargas; 14.05.2012

Я не знаю, как обнаружить пустую строку.

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

.. и вывести несколько текстовых файлов.

Делайте то, что делается для одного файла, в цикле.

person Andrew Thompson    schedule 10.05.2012

Вы можете обнаружить пустую строку, чтобы узнать, является ли строка пустой или нет. Например:

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

Или вы можете сделать (при использовании JDK 1.6 или более поздней версии)

if(str!=null && str.isEmpty())
person CoolBeans    schedule 10.05.2012
comment
Ваши два условия не эквивалентны. isEmpty() проверяет только длину, предварительно не обрезает - person Guillaume Polet; 11.05.2012
comment
@GuillaumePolet - это было упущением с моей стороны. Также добавлена ​​нулевая проверка! - person CoolBeans; 11.05.2012

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 для записи в новый файл.

person Piyush Mattoo    schedule 10.05.2012

Что-то вроде этого должно делать:

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();
    }
person ant    schedule 10.05.2012