Как читать несколько файлов с потоками? [Дубликат]

1
задан Still Learning 13 October 2014 в 19:23
поделиться

2 ответа

Лучше всего использовать шаблон потребления производителя. Нити производителя будут читать файлы и отправлять контент потребителю, обернув его в каком-то классе. Который напишет объединенный файл на диск.

На стороне потребителя вы можете использовать очередь приоритетов и позволить производителю установить приоритет.

1
ответ дан VGaur 25 August 2018 в 15:27
поделиться

Ну, здесь много ненужного дублирования кода.

Каждый экземпляр MultiFileReadingThread должен иметь собственный читатель и писатель, который никогда не доступен извне потока. Кажется, что у вас есть несколько потоков, использующих один и тот же сценарий, в этом случае это не получится очень хорошо.

Попробуйте следующее:

public MultiFileReadingThread(String name, List<File> inputFiles, File outputFile) {
    this.writer = new BufferedWriter(new FileWriter(outputFile));
    this.name = name;
    this.files = inputFiles;
}

@Override
public void run() {
    SimpleDateFormat formatter = new SimpleDateFormat("dd/mm/yyyy hh:mm:ss:ms");
    System.out.println("Start Time : " + name + formatter.format(System.currentTimeMillis()));
    //readFile();
    if(i == 1){

    }
    writeIntoSharedBufferedWriter();
    System.out.println("End Time : " + name +  formatter.format(System.currentTimeMillis()));
}

public void writeIntoBufferedWriter(){
    for(File f : files){
        try{
        BufferedReader r = new BufferedReader(new FileReader(f));
        String line = null;
        while((line = r.readLine()) != null){
            writer.write(line);
            writer.write("\n");
        }
        } catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

Не забывайте, что вы Также вам нужно закрыть BufferedReader и BufferedWriter.

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

0
ответ дан Justin 25 August 2018 в 15:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: