Java 只有最后一行正在写入文件
我需要帮助。我试图将有效的串行密钥与无效的串行密钥分开。我得到了正确的输出。但当我试图将其写入文件时,只有最后一行被写入。 输出为: 一百万 1A000001 1A000002 1A000003 1A000004 1A000005 2B200012 3C343455 4D342423 5E324344 6F435435 7G245347 我想把它写进一个文件。但只有7G245347正在编写中Java 只有最后一行正在写入文件,java,printwriter,Java,Printwriter,我需要帮助。我试图将有效的串行密钥与无效的串行密钥分开。我得到了正确的输出。但当我试图将其写入文件时,只有最后一行被写入。 输出为: 一百万 1A000001 1A000002 1A000003 1A000004 1A000005 2B200012 3C343455 4D342423 5E324344 6F435435 7G245347 我想把它写进一个文件。但只有7G245347正在编写中 import java.util.*;` import java.io.*; public class
import java.util.*;`
import java.io.*;
public class ValidSerialKey {
public static void main(String[] args) throws IOException {
String keys = "";
File file = new File("serialkeys.txt");
try{
Scanner scan = new Scanner(file);
while (scan.hasNext()){
keys = scan.nextLine();
if ((keys.charAt(0) == '1' || keys.charAt(0) == '2' || keys.charAt(0) == '3' || keys.charAt(0) == '4' || keys.charAt(0) == '5' ||
keys.charAt(0) == '6' || keys.charAt(0) == '7' || keys.charAt(0) == '8' || keys.charAt(0) == '9' ) &&
(keys.charAt(1) == 'A' || keys.charAt(1) == 'B' || keys.charAt(1) == 'C' || keys.charAt(1) == 'D' || keys.charAt(1) == 'E' ||
keys.charAt(1) == 'F' || keys.charAt(1) == 'G' || keys.charAt(1) == 'H' || keys.charAt(1) == 'I' || keys.charAt(1) == 'J' ||
keys.charAt(1) == 'K' || keys.charAt(1) == 'L' || keys.charAt(1) == 'M' || keys.charAt(1) == 'N' || keys.charAt(1) == 'O' ||
keys.charAt(1) == 'P' || keys.charAt(1) == 'Q' || keys.charAt(1) == 'R' || keys.charAt(1) == 'S' || keys.charAt(1) == 'T' ||
keys.charAt(1) == 'U' || keys.charAt(1) == 'V' || keys.charAt(1) == 'W' || keys.charAt(1) == 'X' || keys.charAt(1) == 'Y' ||
keys.charAt(1) == 'Z' )){
System.out.println(keys);
File filein = new File("ValidKeys.txt");
try{
try
(PrintWriter pw = new PrintWriter(filein)){
pw.print(keys);
pw.close();
}
}catch (FileNotFoundException ex){
System.out.println(ex.getMessage());
}
}//end of if
}//end of while
scan.close();
}catch (FileNotFoundException exp){
System.out.println(exp.getMessage());
}
}
}
您希望在循环的下一次迭代中保持
PrintWriter
处于打开状态以编写其他内容所以不要在每次迭代中创建一个新的 作为补充说明,在使用
try with resources
时,不需要显式关闭PrintWriter
实例
您应该替换此逻辑:
loop
try
(PrintWriter pw = new PrintWriter(uniqueFile)){
pw.print(keys);
}//end of inner try
end loop
通过将整个逻辑包含在try with resources
语句中的逻辑:
try(PrintWriter pw = new PrintWriter(uniqueFile)){
loop
pw.print(keys);
end loop
}
catch (IOException e){
... // exception handling
}
您希望在循环的下一次迭代中保持
PrintWriter
处于打开状态以编写其他内容所以不要在每次迭代中创建一个新的 作为补充说明,在使用
try with resources
时,不需要显式关闭PrintWriter
实例
您应该替换此逻辑:
loop
try
(PrintWriter pw = new PrintWriter(uniqueFile)){
pw.print(keys);
}//end of inner try
end loop
通过将整个逻辑包含在try with resources
语句中的逻辑:
try(PrintWriter pw = new PrintWriter(uniqueFile)){
loop
pw.print(keys);
end loop
}
catch (IOException e){
... // exception handling
}
您继续在循环中重新打开同一文件。。。不要求附加文件。用于验证问题。请改善你的状况。字符是一个数值,因此您可以检查间隔[0-9],如
c>='0'&&c='A'&&c谢谢!我的代码现在运行得很好。是否可以同时编写文件?我已经在一个文件中写入了有效的序列号。如果我还必须将无效的序列写入另一个文件,那么该怎么办?向PrintWriter
声明会有什么问题?您一直在循环中重新打开同一个文件。。。不要求附加文件。用于验证问题。请改善你的状况。字符是一个数值,因此您可以检查间隔[0-9],如c>='0'&&c='A'&&c谢谢!我的代码现在运行得很好。是否可以同时编写文件?我已经在一个文件中写入了有效的序列号。如果我还必须将无效的序列写入另一个文件,该怎么办?向PrintWriter
声明会有什么问题?这只会起作用一次,您在循环中关闭了PrintWriter
。这应该在循环之外完成。对。谢谢:)我正在考虑你的意见和解决这个问题的更好方法。我更新了。最后,尝试使用资源
是合适的。您认为这个版本怎么样?取决于OP是否希望在异常上中断循环。我会像您一样保留try with资源,但会捕获其中的一些异常(PrintWriter.append
未指定任何异常,因此在您的情况下,是否存在风险?不确定)。但是,我们可以根据用户(扫描器)的输入防止循环中断(但我在这里想得更多),“这取决于OP是否希望在异常上中断循环。”事实上,只有PrintWriter()
构造函数声明抛出FileNotFoundException
。所以,我们很快就会得到例外。如果抛出FileNotFoundException
,循环就没有真正意义。“PrintWriter.append没有指定任何异常,因此在您的情况下,是否存在风险?不确定”确实PrintWriter
方法不会抛出I/O异常,但它的一些构造函数会抛出I/O异常。例如,在write(String)
方法中,您可以看到:catch(IOException x){trouble=true;}
这只工作一次,您关闭了循环中的PrintWriter
。这应该在循环之外完成。对。谢谢:)我正在考虑你的意见和解决这个问题的更好方法。我更新了。最后,尝试使用资源
是合适的。您认为这个版本怎么样?取决于OP是否希望在异常上中断循环。我会像您一样保留try with资源,但会捕获其中的一些异常(PrintWriter.append
未指定任何异常,因此在您的情况下,是否存在风险?不确定)。但是,我们可以根据用户(扫描器)的输入防止循环中断(但我在这里想得更多),“这取决于OP是否希望在异常上中断循环。”事实上,只有PrintWriter()
构造函数声明抛出FileNotFoundException
。所以,我们很快就会得到例外。如果抛出FileNotFoundException
,循环就没有真正意义。“PrintWriter.append没有指定任何异常,因此在您的情况下,是否存在风险?不确定”确实PrintWriter
方法不会抛出I/O异常,但它的一些构造函数会抛出I/O异常。例如,在write(String)
方法中,您可以看到:catch(IOException x){trouble=true;}