Прежде всего, исходя из вашей проблемы, было бы очень полезно, если бы вы могли читать построчно.К счастью, с помощью реализации Streams в Java-8 вы можете сделать это!
Метод добавит каждую строку файла как String
в ArrayList<String>
.
static ArrayList<String> readFileText (String filename){
//ArrayList to hold all the lines
ArrayList<String> lines = null;
//Get lines of text (Strings) as a stream
try (Stream<String> stream = Files.lines(Paths.get(filename))){
// convert stream to a List-type object
lines = (ArrayList<String>)stream.collect(Collectors.toList());
}
catch (IOException ioe){
System.out.println("\nCould not read lines of text from the file.");
}
catch (SecurityException se){
System.out.println("Could not read the file provided." +
"Please check if you have permission to access it.");
}
return lines;
}
Используя вышеописанный метод, вам удастся добавить каждую строку из текстового файла, как String
в массиве, но нам все еще нужно удалить пробелы изтеперь каждая строка.
Итак, очень упрощенный способ сделать это - написать выходной файл следующим методом:
static void writeFileText (String filename, ArrayList<String> linesOfText){
// Specify file location and name
Path file = Paths.get(filename);
// StringBuilder will be used to create ONE string of text
StringBuilder sb = new StringBuilder();
// Iterate over the list of strings and append them
// to string-builder with a 'new line' carriage return.
for( String line : linesOfText){
line.replaceAll(" ", ""); // Replace all whitespace with empty string
sb.append(line).append("\n");
}
// Get all bytes of produced string and instantly write them to the file.
byte[] bytes = sb.toString().getBytes();
// Write to file
try{
Files.write(file, bytes);
}
catch(IOException ioe){
System.out.println("\nCould not write to file \""+filename+"\".);
}
}
Тогда ваш основной метод будет иметь длину всего 2 строки(учитывая, что вы просто решили проблему, которую отправили, и не более того):
public static void main(String[] args){
ArrayList<String> lines = Class.readFileText("input.txt");
Class.writeFileText("output.txt", lines);
}
Здесь Class относится к имени класса, в котором находятся статические методы.
Вышеуказанные методы были взяты из этого репозитория GitHub.