如何在java中多次写入文件?
我正在编写一个程序,它将计算2到10000之间的所有素数,并将其写入一个文件 人们告诉我如何写入文件的不同方法,所以我接受了一个建议并尝试了一下。 起初,我将文件创建放在一个循环中,每次都以程序重新创建文件结束,然后我将文件创建从循环中取出,现在我得到了错误 有人能告诉我这是不是一种方法吗?如果不是,应该怎么做,或者我该怎么做 已经有一个文件也可以工作,然后从我的程序中添加/编辑/覆盖它如何在java中多次写入文件?,java,file,overwrite,Java,File,Overwrite,我正在编写一个程序,它将计算2到10000之间的所有素数,并将其写入一个文件 人们告诉我如何写入文件的不同方法,所以我接受了一个建议并尝试了一下。 起初,我将文件创建放在一个循环中,每次都以程序重新创建文件结束,然后我将文件创建从循环中取出,现在我得到了错误 有人能告诉我这是不是一种方法吗?如果不是,应该怎么做,或者我该怎么做 已经有一个文件也可以工作,然后从我的程序中添加/编辑/覆盖它 public static void main(String[] arg){ int prime =
public static void main(String[] arg){
int prime = 2;
File file = new File("out.txt"); // how should i do this part
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
while(prime < 10000){
boolean isPrime = true;
for( int i = 2; i <= sqrt(prime); i++){
if( (prime%i) == 0 ){
isPrime = false;
break;
}
}
if(isPrime){
bw.write(prime + " "); // and this
}
prime++;
}
}
publicstaticvoidmain(字符串[]arg){
int素数=2;
File File=new File(“out.txt”);//我应该如何做这部分
FileWriter fw=新的FileWriter(file.getAbsoluteFile());
BufferedWriter bw=新的BufferedWriter(fw);
while(prime<10000){
布尔值isPrime=true;
对于(int i=2;i您必须写入,然后在末尾关闭FileWriter和BufferedWriter
把这些线放在循环后的最后一行--
此外,使用FileWriter fw=new FileWriter(file.getAbsoluteFile(),true);
将允许您附加到现有文件中。请注意“true”。代码看起来不错,完成后请确保关闭流
如果不希望每次都创建一个新文件,可以在写入模式下打开现有文件
如果出现故障,我会将bw.write(prime+);
放在try/catch
块中,以便优雅地退出。如果文件不file.exists()
则可能还需要包含file.createNewFile()
语句
最后,确保您bw.close()
缓冲写入程序
除此之外,所有的东西都看起来像标准杆。
我会做一个:
try {
bw.write(stuff);
}
Catch (IOException e) {
e.printStackTrace();
}
我的猜测是,您的错误是由于一些代码可以抛出的已检查异常,并且您没有捕获或声明要抛出的main
。您还可能泄漏资源。如果您使用的是Java 7,我建议您执行以下操作(使用a):
publicstaticvoidmain(字符串[]arg){
File File=新文件(“out.txt”);
试一试(
BufferedWriter bw=新的BufferedWriter(新文件写入程序(文件))
) {
对于(整数素数=2;素数<10000;++素数){
布尔值isPrime=true;
最终整数极限=(整数)sqrt(素数);//
for(int i=2;i使用StringBuffer缓存所有素数,在for循环完成对所有数字的迭代后,将StringBuffer转换为字符串并一次性写入输出文件。您会遇到什么错误?如果可用,请发布堆栈跟踪。您可能希望查看[此处]()我把try/catch块放在if语句和bw.close()中,放在while循环之后,但它仍然无法编译。它说:“必须捕获或声明抛出未报告的异常ioexception”通过我的文件创建谢谢你!现在它可以正常工作了!我知道这种方法不是最好的,但它是一种简单的方法。但是我会研究你的建议,也许用这种方法做另一个程序!
try {
bw.write(stuff);
}
Catch (IOException e) {
e.printStackTrace();
}
public static void main(String[] arg){
File file = new File("out.txt");
try (
BufferedWriter bw = new BufferedWriter(new FileWriter(file))
) {
for (int prime = 2; prime < 10000; ++prime) {
boolean isPrime = true;
final int limit = (int) sqrt(prime); //
for (int i = 2; i <= limit && isPrime; i++) {
isPrime = prime % i != 0;
}
if (isPrime){
bw.write(String.valueOf(prime));
bw.newLine();
}
}
} catch (IOException ex) {
e.printStackTrace();
}
}
public static void main(String[] arg){
File file = new File("out.txt");
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(file));
for (int prime = 2; prime < 10000; ++prime) {
boolean isPrime = true;
int limit = (int) sqrt(prime);
for( int i = 2; i <= limit && isPrime; i++) {
isPrime = prime % i != 0;
}
if (isPrime) {
bw.write(String.valueOf(prime));
bw.newLine();
}
}
} catch (IOException ex) {
e.printStackTrace();
} finally {
if (bw != null) {
try { bw.close(); }
catch (IOException ignored) { }
}
}
}