正确关闭DataOutputStream的地方?

时间:2015-03-05 23:38:42

标签: dataoutputstream

我目前正在开发一个程序,为每个读入的文件创建一个线程,读取它并将特定信息写入另一个文件。我的问题是我不确定在哪里需要关闭DataOutputStream。 ..

在循环中关闭它只会使程序停止并导致无输出。 下面是一些代码:这是同步块,我相信写作需要发生。

   //Takes in zip,city,state and writes them to ZipCityState file
   class Counter {
      public synchronized void update(int zip, String city, String state){
        try {
          DataOutputStream dos = new DataOutputStream(new FileOutputStream("ZipCityState.dat"));
          dos.writeInt(zip);
          dos.writeUTF(city);
          dos.writeUTF(state);
          count++;
          }
         catch(IOException ioe){
            ioe.printStackTrace();
         }      
      }   
   }

以下是线程的运行方法

 public void run(){
     DataInputStream dis = null;
     int zip = 0;
     String city = null;
     String state = null;
     double longitude = 0;
     double latitude = 0;
     int timeZone = 0;
     int DST = 0;
     int recCount = 0;

 try {
 dis = new DataInputStream(new FileInputStream(theFile));
 while(true){
    zip = dis.readInt();
    city = dis.readUTF();
    state = dis.readUTF();
    longitude = dis.readDouble();
    latitude = dis.readDouble();
    timeZone = dis.readInt();
    DST = dis.readInt();
    ata.addCity(city);
    recCount++;
    c.update(zip, city, state);
 }
 }
 catch (FileNotFoundException fnfe) {
    System.out.println("File not found");
 }

 catch(EOFException eof) {
    System.out.printf("Filenameis: %s completed, record count is %,d %n", theFile, recCount);
        try{
            dis.close();
       }
           catch(IOException ioe) {
            System.out.println("Error closing file "+theFile);
           }    
 }
 catch(IOException ie){
    ie.printStackTrace();
 } 

 }// end run

0 个答案:

没有答案