[英]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);
}
您還可以依賴Path
和Stream
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');
}
}
使用Path
和Stream
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.