FileOutputStream的写入量比应该的少



我正试图编写一个程序,将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是创建正弦的类。gs.getSalida()返回正弦值,正弦类工作得很好,这不是问题。

确保总是调用输出流的close()方法。这可以确保所有缓存的数据都被写入流。

如果你在写字符,使用FileWriter会更方便。

试试这个…

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

我改进了你的代码:

... ...
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%关闭。使用"out!"=null",以防out未初始化。在out打开而"muestras"未打开的情况下,关闭'out'而不是关闭"muestras"

相关内容

  • 没有找到相关文章

最新更新