簡體   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