2013-09-28 177 views
0

我試圖將一些數據寫入內部存儲。問題在於我閱讀它時。它不會讀取任何內容。 Logcat說它在裏面寫了一些東西。但是當我讀到它時,Log貓說它是空的。這是我的文件管理器:android:內部文件讀取

public class FileManager { 
    File dir; 
    File driveFile; 
    BufferedWriter writer=null; 
    BufferedReader reader=null; 

    public FileManager(Context context,String name){ 
     dir = new File(context.getFilesDir(),"drives"); 
     dir.mkdirs(); 
     driveFile = new File(dir,name+".txt"); 
     Log.d("FileManager",driveFile.getAbsolutePath()); 
    } 

    public void open() throws IOException{ 
     writer = new BufferedWriter(new FileWriter(driveFile)); 
     reader = new BufferedReader(new FileReader(driveFile)); 
    } 

    public void close() throws IOException{ 
     writer.close(); 
     reader.close(); 
    } 

    public boolean writeTrackPoints(Drive drive){ 
     TrackPoint [] trackPoints=drive.getTrackPoints(); 
     Log.d("FileManager", "writing...."); 
     for(int i=0;i<trackPoints.length;i++){ 
      try { 
       String line = trackPoints[i].getParsingString()+"\r\n"; 
       writer.write(line); 
       writer.flush(); 
       Log.d("FileManager", "Writing" + line); 
      } catch (IOException e) { 
       return false; 
      }   
     }  
     return true; 
    } 

    public boolean readTrackPoints(Drive drive){ 
     String line=null; 
     Log.d("FileManager", "reading...."); 
     try { 
      while((line = reader.readLine())!=null){ 
       Log.d("FileManager", "Reading: "+line); 
       drive.addTrackPoint(new TrackPoint(line)); 
      } 
     } catch (IOException e) { 
      Log.d("FileManager", e.getMessage()); 
      return false; 
     }  
     return true; 
    } 
} 

我無法檢查文件是否爲空,因爲我的設備沒有根。我意識到它不會在閱讀時進入細胞。是不是一次打開兩個流的問題?

+0

通過BufferedReader/BufferedWriter不可能做到讀寫同時進行。要麼爲每個訪問新實例,打開和關閉文件,要麼使用其他機制。 –

+0

有時候你會吞食異常,有時你只是記錄消息而不是完整的堆棧跟蹤。在這兩種情況下,當你要讓調用者這樣做時,你都會捕獲異常 - 你的IO方法應該聲明他們拋出了'IOException',而不是*嘗試處理異常。 –

+0

Joop Eggen:我在寫作時創建新實例,然後關閉它創建新的實例以供閱讀。 – SpeedEX505

回答

1

我解決了它。問題在方法打開/關閉。也許一時之間無法打開兩個流。這是編輯的文件管理器:

public class FileManager { 

    File dir; 
    File driveFile; 
    BufferedWriter writer=null; 
    BufferedReader reader=null; 
    public FileManager(Context context,String name){ 
     dir = new File(context.getFilesDir(),"drives"); 
     dir.mkdirs(); 
     driveFile = new File(dir,name+".txt"); 
     Log.d("FileManager",driveFile.getAbsolutePath()); 
    } 

    public void writeTrackPoints(Drive drive) throws IOException{ 
     writer = new BufferedWriter(new FileWriter(driveFile)); 
     TrackPoint [] trackPoints=drive.getTrackPoints(); 
     for(int i=0;i<trackPoints.length;i++){ 
      String line = trackPoints[i].getParsingString()+"\r\n"; 
      writer.write(line); 
      writer.flush(); 
     } 
     writer.close(); 
    } 

    public void readTrackPoints(Drive drive) throws IOException{ 
     reader = new BufferedReader(new FileReader(driveFile)); 
     String line=null; 
     while((line = reader.readLine())!=null){ 
      drive.addTrackPoint(new TrackPoint(line)); 
     } 
     reader.close(); 
    } 
}