FileOutputStream 写得比应有的少

FileOutputStream writing less than it should

我正在尝试编写一个程序,将 sinwave 的数据保存到 .txt 文件中,但是当我执行该程序时,它写入的内容比应有的少(有时甚至什么都不写)。这是代码:

public static void main(String[] args) {
    GeneradorSeñal gs = new GeneradorSeñalSinusoidal("sgsg");
    Double salida;
    try{
        FileOutputStream out = new FileOutputStream("out.txt"); 
        OutputStreamWriter muestras = new OutputStreamWriter(out);

        for(int i=0; i<500; i++){
            salida=gs.getSalida();
            muestras.write(String.valueOf(salida)+"\n");
            System.out.println(i+"\t"+salida);
        }
    }catch(Exception e){
        e.getStackTrace();
    }
}

GeneradorSeñal 和 GeneradorSeñalSinusoidal 是创建正弦曲线的 classes。 gs.getSalida() returns正弦值,正弦值class效果很好,不是问题。

确保始终调用输出流的close()方法。这确保所有缓冲数据都写入流。

此外,如果您要写字符,使用 FileWriter 更方便。

我改进了你的代码:

... ...
try{
    FileOutputStream out = new FileOutputStream("out.txt"); 
    OutputStreamWriter muestras = new OutputStreamWriter(out);

    for(int i=0; i<500; i++){
        salida=gs.getSalida();
        muestras.write(String.valueOf(salida)+"\n");
        System.out.println(i+"\t"+salida);
    }
    muestras.flush();
}catch(Exception e){
    e.printStackTrace();
}finally{
    if(out!=null){
        try{out.close();}
        catch(Throwable e){
             e.printStackTrace();
        }

    }
}

使用 finally 确保输出流是 100% closed.And 使用 "out!=null" 以防 out 未初始化。如果 out 已打开但 "muestras" 未打开,则关闭 'out' 而不是关闭 "muestras"。

试试这个..

try{
 for(int i=0; i<500; i++){
        salida=gs.getSalida();
        muestras.write(String.valueOf(salida)+"\n");
        muestras.flush();
        System.out.println(i+"\t"+salida);
    }
}catch(IOException ioe){
    ioe.printStackTrace();
}finally{
    try{
       muestras.close();
    }finally{}
}