Как записать данные построчно из двух файлов в общий файл в Java
Я сталкиваюсь при объединении двух файлов в один (с общим содержимым)
public class myFileReader {
public static void main(String[] args) throws Exception {
List<String> firstFileList = new ArrayList<String>();
List<String> secondFileList = new ArrayList<String>();
List<String> missingRecordsInFile2 = new ArrayList<String>();
Scanner firstFile = new Scanner(new FileReader(new File("C://write1.txt")));
Scanner secondFile = new Scanner(new FileReader(new File("C://write2.txt")));
FileWriter fWriteOne = new FileWriter(new File("C://read1.txt"));
while (firstFile.hasNext()) {
firstFileList.add(firstFile.next());
}
while (secondFile.hasNext()) {
secondFileList.add(secondFile.next());
}
try {
for (String fileOne : firstFileList) {
boolean value = secondFileList.contains(fileOne);
if (value) {
missingRecordsInFile2.add(fileOne);
fWriteOne.write(fileOne);
fWriteOne.write(System.getProperty("line.separator"));
}
}
} finally {
fWriteOne.close();
}
}
}
Например:
ФАЙЛ 1:
Yellow wall
Red Wall
Green wall
Black wall
ФАЙЛ 2:
Red Wall
Black wall
Brown wall
ФАЙЛ РЕЗУЛЬТАТОВ (Мое желание):
Red Wall
Black wall
Но этот код записать в файл как:
ТЕКУЩИЙ ФАЙЛ РЕЗУЛЬТАТОВ:
Red
wall
Black
wall
3 ответа
Вы близки к решению, но делаете простую ошибку. то есть вы читаете firstFile.next()
который дает вам слово за словом вместо строки за строкой, так как вас интересует строка за строкой nextLine()
Подобно:
while (firstFile.hasNext()) {
firstFileList.add(firstFile.nextLine().trim());
}
while (secondFile.hasNext()) {
secondFileList.add(secondFile.nextLine().trim());
}
try {
for (String fileOne : firstFileList) {
boolean value = secondFileList.contains(fileOne);
if (value) {
missingRecordsInFile2.add(fileOne);
fWriteOne.write(fileOne);
fWriteOne.write(System.getProperty("line.separator"));
}
}
} finally {
fWriteOne.close();
}
БОЛЬШЕ
Я рекомендую использовать String.Trim()
чтобы избежать лишних пробелов после текста, как Red Wall_
не равно Red Wall
из-за одного пробела.
Вы используете разделитель сканера по умолчанию, который является пробелом. Вы должны установить разделитель на новую строку ('\r' и / или '\n'), вот так
Scanner firstFile = new Scanner(new FileReader(new File("C://write1.txt")));
Scanner secondFile = new Scanner(new FileReader(new File("C://write2.txt")));
firstFile.useDelimiter(Pattern.compile("[\\r\\n]+"));
secondFile.useDelimiter(Pattern.compile("[\\r\\n]+"));
Может быть, вы также можете использовать более простой
myScanner.useDelimiter(System.getProperty( "line.separator" ));
но если у вас есть несколько новых строк в конце строки, вы получите пустые строки в выходном файле.
Вы должны хранить содержимое двух файлов в двух List
как вы сделали:
List<String> firstFileList = new ArrayList<String>();
List<String> secondFileList = new ArrayList<String>();
/***** Start : This is dummy data ********/
firstFileList.add("Yellow wall");
firstFileList.add("Red Wall");
firstFileList.add("Green wall");
firstFileList.add("Black wall");
secondFileList.add("Red Wall");
secondFileList.add("Black wall");
secondFileList.add("Brown wall");
/***** End: This is dummy data ********/
firstFileList.retainAll(secondFileList);
Сейчас firstFileList
содержит все данные, которые вам нужны.