Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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 BufferedWriter未写入文件_Java_File Io - Fatal编程技术网

Java BufferedWriter未写入文件

Java BufferedWriter未写入文件,java,file-io,Java,File Io,我正在制作一个程序,我需要在一个文件中添加一个随机的6位数ID列表。目前,每当我运行程序的这一部分时,都不会向文件中添加任何内容。我到底做错了什么,使代码无法写入文件?我检查并确保所有的随机数都被生成 static HashSet<Integer> idHashList = new HashSet<>(); public static void createIds(){ File writeId = new File("peopleIDs.tx

我正在制作一个程序,我需要在一个文件中添加一个随机的6位数ID列表。目前,每当我运行程序的这一部分时,都不会向文件中添加任何内容。我到底做错了什么,使代码无法写入文件?我检查并确保所有的随机数都被生成

static HashSet<Integer> idHashList = 
        new HashSet<>();

public static void createIds(){
    File writeId = new File("peopleIDs.txt");
    try {
        FileWriter fw = new FileWriter(writeId,true);
        BufferedWriter out = new BufferedWriter(fw);

        for(int i = 0; i < 100; i++){
            out.write(People.genRand());
        }
        out.close();
    } catch (IOException ex) {
        System.out.println(ex.getMessage());
    }
}

protected static int genRand(){
    while(true){
        int rand = ((int) ((Math.random() * (899999))+100000));
        if(idHashList.add(rand)){
            return rand;
        }
    }
}
静态HashSet idHashList=
新HashSet();
公共静态void createId(){
File writeId=新文件(“peopleid.txt”);
试一试{
FileWriter fw=新的FileWriter(writeId,true);
BufferedWriter out=新的BufferedWriter(fw);
对于(int i=0;i<100;i++){
out.write(People.genRand());
}
out.close();
}捕获(IOEX异常){
System.out.println(例如getMessage());
}
}
受保护的静态int-genRand(){
while(true){
int rand=((int)((Math.random()*(899999))+100000));
if(idHashList.add(rand)){
返回兰特;
}
}
}

它可能会写入文件,但不是您认为的文件。Java将写入当前目录中的
peopleIDs.txt
文件。当前目录是执行
java
命令的目录

如果从IDE启动程序,请检查运行配置以查看它使用的当前目录。如果你真的不知道,那么在你的硬盘上搜索
peopleIDs.txt


也就是说,
close()
应该在finally块中。或者更好的是,您应该使用构造。

它可能会写入文件,但不是您认为的文件。Java将写入当前目录中的
peopleIDs.txt
文件。当前目录是执行
java
命令的目录

如果从IDE启动程序,请检查运行配置以查看它使用的当前目录。如果你真的不知道,那么在你的硬盘上搜索
peopleIDs.txt


也就是说,
close()
应该在finally块中。或者更好的是,您应该使用构造。

您调用了错误的方法
BufferedWriter.write(int)
只写一个
char。
检查Javadoc。如果要将整数写入四个二进制字节,则需要
DataOutputStream.writeInt()。
如果要将其写入字符串,则需要
BufferedWriter.write(“+People.genRand()),
可能后跟
BufferedWriter.newLine()。
您调用了错误的方法
BufferedWriter.write(int)
只写一个
char。
检查Javadoc。如果要将整数写入四个二进制字节,则需要
DataOutputStream.writeInt()。
如果要将其写入字符串,则需要
BufferedWriter.write(“+People.genRand()”),
可能后跟
BufferedWriter.newLine()。

您可以尝试像下面这样填充文件:

PrintWriter writer = null;
try {
    writer = new PrintWriter("peopleIDs.txt", "UTF-8");
    for (int i = 0; i < 100; i++) {
        writer.println(genRand());
    }
} catch (IOException ex) {
    System.out.println(ex.getMessage());
} finally {
    if(writer != null){
        writer.close();
    }
}
PrintWriter=null;
试一试{
writer=新的PrintWriter(“peopleId.txt”、“UTF-8”);
对于(int i=0;i<100;i++){
writer.println(genRand());
}
}捕获(IOEX异常){
System.out.println(例如getMessage());
}最后{
if(writer!=null){
writer.close();
}
}

您可以尝试像下面这样填充文件:

PrintWriter writer = null;
try {
    writer = new PrintWriter("peopleIDs.txt", "UTF-8");
    for (int i = 0; i < 100; i++) {
        writer.println(genRand());
    }
} catch (IOException ex) {
    System.out.println(ex.getMessage());
} finally {
    if(writer != null){
        writer.close();
    }
}
PrintWriter=null;
试一试{
writer=新的PrintWriter(“peopleId.txt”、“UTF-8”);
对于(int i=0;i<100;i++){
writer.println(genRand());
}
}捕获(IOEX异常){
System.out.println(例如getMessage());
}最后{
if(writer!=null){
writer.close();
}
}

1)这会编译吗?看起来有两种方法是相同的。2) 当idHashList没有在代码中的任何地方使用时,为什么还要发布它呢?3) 你确定
People.genRand()
正在做你认为应该做的事吗?你们有并没有试过打印出它返回的内容,然后将其写入文件,只是为了测试一些东西?哇@HovercraftFullOfEels复制了相同的东西两次:P.修复了它now@TomaszGawel为什么?
flush()
close()中自动发生。
参见Javadoc.1)编译吗?看起来有两种方法是相同的。2) 当idHashList没有在代码中的任何地方使用时,为什么还要发布它呢?3) 你确定
People.genRand()
正在做你认为应该做的事吗?你们有并没有试过打印出它返回的内容,然后将其写入文件,只是为了测试一些东西?哇@HovercraftFullOfEels复制了相同的东西两次:P.修复了它now@TomaszGawel为什么?
flush()
close()中自动发生。
请参阅Javadoc。您可以确认名为
peopleIds.txt
的所有文件均为空。我使用的是NetBeans,它们还有一个文件目录,其中有一个同名的文件是空的。然后,您可能有一个异常,但没有看到错误消息,或者
genRand()
返回一个空字符串,或者从未调用该方法。我正在打印我的异常,因此我会看到是否有异常,正如我前面所说的,当在
return rand之前添加print语句时,这些数字会显示在命令行中。要做到这一点,必须调用该方法:P。那么我看到的唯一可能性是,调用该方法后,其他方法会重置该文件。您正在向该文件写入随机字符。所以你应该期望它充满随机字符。读取write()的javadoc。它不打印整数的十进制表示形式。它将字符写入文件。可以确认所有名为
peopleIds.txt
的文件都为空。我使用的是NetBeans,它们还有一个文件目录,其中有一个同名的文件是空的。然后,您可能有一个异常,但没有看到错误消息,或者
genRand()
返回一个空字符串,或者从未调用该方法。我正在打印我的异常,因此我会看到