Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 只有最后一行正在写入文件_Java_Printwriter - Fatal编程技术网

Java 只有最后一行正在写入文件

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

我需要帮助。我试图将有效的串行密钥与无效的串行密钥分开。我得到了正确的输出。但当我试图将其写入文件时,只有最后一行被写入。 输出为:

一百万 1A000001 1A000002 1A000003 1A000004 1A000005 2B200012 3C343455 4D342423 5E324344 6F435435 7G245347

我想把它写进一个文件。但只有7G245347正在编写中

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;}