2017-03-22 3 views
0

Ich versuche, in eine Datei zu laden, und ich erhalte eine FileNotFoundException, obwohl die Datei vorhanden ist. Ich habe versucht, den absoluten Pfad (C: /Users/cdeck_000/AndroidStudioProjects/ProjectCaligula_Final/cert/cert.crt) und den relativen Pfad (cert/cert.crt) zu machen, vorausgesetzt Android startet auf der Projektebene. Wenn ich es mit dem relativen Pfad laufen und fragen Sie nach der Datei absoluten Pfad bekomme ich dies:FileNotFoundException auf .crt-Datei

Pfad: /cert/cert.crt

Der folgende Code zusammen mit der Projektstruktur ist.

File file = new File("cert/cert.crt"); 
boolean i = file.exists(); //false 
boolean r = file.canRead(); //false 
String path = file.getAbsolutePath(); //cert/cert.crt 
String pathForApp = new File(".").getAbsolutePath(); //returns "/." 
InputStream caInput = new BufferedInputStream(new FileInputStream(file)); //error 

File Structure

Kann jemand läuten und lassen Sie mich wissen, ob mein Wissen über absolute/relative Pfade mit Android falsch ist oder mir einen Rat geben, wie dieses Problem zu lösen? Ich habe bereits gedacht, dass Berechtigungen das Problem war, aber ich habe die Berechtigungen für Dateien (entspricht Chmod 777) und es hat nichts geändert.

+0

Ihre IDE wird normalerweise Ihre Anwendung aus dem Verzeichnis 'build' oder' build/classes' ausführen. Ihre Zertifikatsdatei sollte deshalb zum Kopieren in das Klassenverzeichnis in das Verzeichnis 'src' gestellt worden sein. – EJP

+0

@EJP danke .. Ich habe die Datei in src verschoben, nun ist der Pfad ../src/cert.crt .. Ich habe die Datei geändert, die jetzt von "cert.crt" geladen wird, aber sie findet sie immer noch nicht. – Chris

+0

Vielleicht liege ich falsch, Ihre Datei befindet sich auf der Festplatte Ihres Computers und wenn Sie die App ausführen, kann Ihre App nicht auf die Festplatte Ihres Computers zugreifen. Und vielleicht wegen 'File file = new File (" cert/cert.crt ");' Sie erhalten die Pfade als String, aber nicht zugänglich, wenn Sie die App auf dem Emulator/Gerät ausführen. Versuchen Sie, die Datei zu lesen, indem Sie sie in den Ordner "res/raw" oder "Assets" einfügen. – knownUnknown

Antwort

2

Sie sollten es in src/cert/cert.crt setzen, was es zu einer Ressource macht, keine Datei, also sollten Sie Class.getResourceAsStream("/cert/cert.crt"), nicht new FileInputStream() verwenden.

0

ich das gleiche Problem hatte, als ich

mein Problem mit dem folgenden Art und Weise lösen
  1. erstellen assets Ordner
  2. Kopieren Sie die Datei in assets Ordner
  3. die Datei Lesen von assets

Verwenden Sie den folgenden Code zum Lesen von assets Ordner

BufferedReader reader = null; 
     try { 
      reader = new BufferedReader(
        new InputStreamReader(getAssets().open("cert.crt"))); 

      // do reading, usually loop until end of file reading 
      String mLine; 
      while ((mLine = reader.readLine()) != null) { 
       //process line 

      } 
     } catch (IOException e) { 
      //log the exception 
     } finally { 
      if (reader != null) { 
       try { 
        reader.close(); 
       } catch (IOException e) { 
        //log the exception 
       } 
      } 
     } 
Verwandte Themen