[英]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.