чтение и запись в поток файлов с использованием Files.lines - PullRequest
0 голосов
/ 22 ноября 2018

Мой входной файл выглядит следующим образом:

 p edge 200 527 
 e 1 2
 e 1 3
 e 1 4 
 e 1 5

Выходной файл должен быть:

 p edge 200 527 
 e 0 1
 e 0 2
 e 0 3 
 e 0 4

Помимо первой строки, я должен уменьшить каждое целое число на 1.

Что я сделал:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class Example {
   public static String pathToTheGraphFile = "C:\\Users\\Desktop\\inputFile.txt";
   public static void main( String[] args ) throws IOException {
      Path path = Paths.get(pathToTheGraphFile );
      try (Stream<String> stream = Files.lines(path);FileWriter fileWriter = new FileWriter("C:\\Users\\Desktop\\outputFile.txt");) {
         stream.skip(1)
         .map(line-> line.split(" "))
         .map(line -> {
            int a = Integer.parseInt(line[1])-1;
            int b = Integer.parseInt(line[2])-1;
            return new String(line[0]+" "+a+" "+b);
         })
         .forEachOrdered(l-> {
            try {
               fileWriter.write(l);
            } catch (IOException e) {
               e.printStackTrace();
            } 
         });
      }
   }
}

Как я могу прочитать первую строку по отдельности?Потому что мне нужно хранить эту информацию в строке 1. Для этого я пропустил первую строку, но я не должен этого делать.

Как видите, даже если программа работает хорошо, читаемость, на мой взгляд, хуже,Есть ли здесь какие-либо предложения?

1 Ответ

0 голосов
/ 22 ноября 2018

Для первого вопроса вы можете использовать метод findFirst () .

Имейте в виду, что метод findFirst () возвращает необязательный .

Редактировать: К сожалению, как-то удалил половину моего поста.

Не читать из inputFile и одновременно выводить в outputFile.Как вы сказали, он плохо читается, и функция должна иметь one .Вы можете сохранить свой поток inputFile в массив, используя collect , а затем снова вывести в поток:

Stream<String> stream = Arrays.stream(arrayOfStrings);

Чтобы иметь возможность записи в выходной файл с использованием потока, обратитесь кэто ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...