使用Files.lines读取和写入文件流

时间:2018-11-22 14:21:48

标签: java file stream

我的输入文件如下:

 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 :(得分:2)

对于第一个问题,您可以使用findFirst() method

请注意,findFirst()方法返回一个optional

编辑:糟糕,我以某种方式删除了一半信息。

请勿同时从inputFile读取并输出到outputFile。正如您所说的那样,它的可读性很差,一个函数应该具有 one 函数。您可以使用collect将inputFile流保存到数组中,然后再次输出到流中:

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

要能够使用流写入输出文件,请参阅此answer.