2013-09-28 2 views
0

J'essaye d'écrire des données dans le stockage interne. Le problème est quand je le lis. Il ne lit rien. Logcat dit qu'il écrit quelque chose dedans. Mais quand je l'ai lu Log chat dit son vide. Ceci est mon gestionnaire de fichier:Android: lecture de fichiers internes

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

Je ne peux pas vérifier si le fichier est vide parce que mon appareil n'est pas enraciné. Je reconnais qu'il ne pénètre pas dans Cyclus en lisant. N'est-ce pas un problème que j'ouvre les deux flux à la fois?

+0

Faire en même temps lire et écrire n'est pas possible via BufferedReader/BufferedWriter. Soit, pour chaque accès à une nouvelle instance, ouvrir et fermer le fichier, ou utiliser un autre mécanisme. –

+0

Parfois, vous avalez des exceptions, et parfois vous consignez simplement le message au lieu de la trace complète de la pile. Dans les deux cas, vous attrapez l'exception quand vous devriez laisser l'appelant faire cela - vos méthodes d'E/S devraient déclarer qu'elles lancent 'IOException', et * not * essaient de gérer l'exception. –

+0

Joop Eggen: Je crée une nouvelle instance lorsque j'écris, puis je la ferme et crée une nouvelle instance pour la lecture. – SpeedEX505

Répondre

1

Je l'ai résolu. Le problème était dans les méthodes d'ouverture/fermeture. Peut-être qu'il n'est pas possible d'ouvrir les deux flux en un instant. Ceci est édité FileManager:

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(); 
    } 
}