繁体   English   中英

从文件中读取随机行并将其写入另一个文件

[英]Reading random lines from a file and writing them to a another file

BufferedWriter不会写入文件“ segfil.txt”:

public static String fileSeg(String name, int co) throws IOException {
    String randomString = "";
    File fil5 = new File("segfil.txt");
    Random r;
    System.out.println("Dude what??");
    BufferedReader reader = new BufferedReader(new FileReader(name));
    BufferedWriter bfwt = newBufferedWriter(newFileWriter(fil5.getName()));
    List<String> lines = new ArrayList<String>();
    String line = reader.readLine();
    System.out.println(line);
    System.out.println("++++++++");
    bfwt.write(line);
    while (line != null) {
        lines.add(line);
        line = reader.readLine();
    }
    // Choose a random one from the list
    while (co > 0) {
        r = new Random();
        randomString = lines.get(r.nextInt(lines.size()));
        System.out.println(randomString);
        bfwt.write(randomString);
        System.out.println(co);
        co--;
    }
    return fil5.getName();
}

我已经生成了随机行,但是无法写入另一个文件。 该文件未写入,因此保持空白。

您应该使用try-with-resources自动关闭文件(因此对于Writer来说是刷新的):

try (BufferedReader reader = new BufferedReader(new FileReader(name));
     BufferedWriter bfwt = newBufferedWriter(newFileWriter(fil5.getName()))) {
  // Code using reader and bfwt.
}

您写完后是否尝试冲洗?

bfwt.write(randomString);
bfwt.flush();

还是您有任何错误?

您不会关闭资源/流。 您需要从代码中改善资源管理。 使用try-with-resources语句

List<String> lines = new ArrayList<>();
try (
  FileReader     fileReader     = new FileReader("...");
  BufferedReader bufferedReader = new BufferedReader(fileReader);
) {
   String line;
   while ( (line = bufferedReader.readLine()) != null) lines.add(line);
}

您还可以依赖PathStream API:

List<String> lines = Files.lines(Paths.get("")).collect(Collectors.toList());

同样的逻辑适用于写:

Random random = ThreadLocalRandom.current();    
try (FileWriter fileWriter = new FileWriter("...")) {
  for (int i = 0; i < co; i++) {
    int lineNumber = random.nextInt(lines.size());
    String line = lines.get(lineNumber);
    fileWriter.write(line);
    fileWriter.write('\n');
  }
}

使用PathStream API:

Files.write(
  Paths.get("..."),
  ThreadLocalRandom.current()
    .ints(co, 0, lines.size())
    .mapToObj(lineNumber -> lines.get(lineNumber))
    .collect(Collectors.toList())
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM