2012-11-06 191 views
1

所以我是一個Java新手,並開始玩一些文件。假設我有一些文件「tes.t」,其中包含我知道的類型的數據 - 假設它們是int-double-int-double等等。但是我不知道里面有多少這樣的對 - 我怎樣才能確保輸入完成?對於我目前的知識,我認爲是這樣的:檢查輸入是否已完成

try{ 
     DataInputStream reading = new DataInputStream(new FileInputStream("tes.t")); 
     while(true) 
     { 
      System.out.println(reading.readInt()); 
      System.out.println(reading.readDouble()); 
     } 
     }catch(IOException xxx){} 
} 

然而,在這裏這個無限循環讓我莫名其妙地難受。我的意思是 - 我猜IOException應該在輸入完成後立即着手,但我不確定這是否是一個好的方法。有沒有更好的方法來做到這一點?或者說 - 什麼是一個更好的辦法,因爲我敢肯定,我的是不好的:)

+0

嘗試http://docs.oracle.com/javase/ tutorial/essential/io/bytestreams.html –

+0

無限循環會以100%CPU使用率掛起程序。 –

回答

3

由於您的文件有INT-兩對,你可以做如下:

DataInputStream dis = null; 
try { 
    dis = new DataInputStream(new FileInputStream("tes.t")); 
    int i = -1; 
    // readInt() returns -1 if end of file... 
    while ((i=dis.readInt()) != -1) { 
     System.out.println(i); 
     // since int is read, it must have double also.. 
     System.out.println(dis.readDouble()); 
    } 

} catch (EOFException e) { 
    // do nothing, EOF reached 

} catch (IOException e) { 
    // handle it 

} finally { 
    if (dis != null) { 
     try { 
      dis.close(); 

     } catch (IOException e) { 
      // handle it 
     } 
    } 
} 
+0

好的,我明白了。謝謝:) – Straightfw

+0

哦,但還有一個問題......如果在輸入中使用了-1作爲合適的int,該怎麼辦?那麼它會不會錯誤地忽略while循環,並且仍然有一些輸入需要處理? – Straightfw

1

這是從的javadoc:

拋出:EOFException - 如果此輸入流 閱讀前四到達終點字節。

這意味着你可以捕獲EOFException以確保EOF到達。您還可以添加某種應用程序級別標記,指示文件已被完全讀取。

+0

我明白了。謝謝:) – Straightfw

2

你可以這樣做以下:

try{ 
    FileInputStream fstream = new FileInputStream("tes.t"); 
    DataInputStream in = new DataInputStream(fstream); 
    BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
    String strLine; 
    //Read File Line By Line 
    while ((strLine = br.readLine()) != null) { 
    System.out.println (strLine); 
    } 
    //Close the input stream 
    in.close(); 
    }catch (IOException e){//Catch exception if any 
System.err.println("Error: " + e.getMessage()); 
} 

注:此代碼是未經測試。

+0

我明白了。謝謝:) – Straightfw

0

如何:

DataInputStream dis = null; 
try { 
    dis = new DataInputStream(new FileInputStream("tes.t")); 
    while (true) { 
     System.out.println(dis.readInt()); 
     System.out.println(dis.readDouble()); 
    } 

} catch (EOFException e) { 
    // do nothing, EOF reached 

} catch (IOException e) { 
    // handle it 

} finally { 
    if (dis != null) { 
     try { 
      dis.close(); 

     } catch (IOException e) { 
      // handle it 
     } 
    } 
} 
+0

好的,謝謝:) – Straightfw