我正试图编写一个程序,将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"