2017-02-06 2 views
0

Ich verwende unten Code, um Dateien in Android zu verschieben.Fehler beim Verschieben von Dateien in Android

public static void moveFile(String inputPath, String inputFile, String outputPath, String absolutePath) { 

    InputStream in = null; 
    OutputStream out = null; 

    try { 

     //create output directory if it doesn't exist 
     File dir = new File (outputPath); 
     if (!dir.exists()) 
     { 
      dir.mkdirs(); 
     } 


     in = new FileInputStream(inputPath + inputFile); 
     out = new FileOutputStream(outputPath + inputFile); 

     byte[] buffer = new byte[1024]; 
     int read; 
     while ((read = in.read(buffer)) != -1) { 
      out.write(buffer, 0, read); 
     } 
     in.close(); 
     in = null; 

     // write the output file 
     out.flush(); 
     out.close(); 
     out = null; 

     // delete the original file 
     new File(absolutePath).delete(); 


    } 

    catch (FileNotFoundException fnfe1) { 
     Log.e("Moving file not found", fnfe1.getMessage()); 
    } 
    catch (Exception e) { 
     Log.e("While Moving", e.getMessage()); 
    } 

Aber die meisten Zeiten zeigt es mir Fehler wie unten dargestellt:

Verschieben Datei nicht gefunden : /call_14-43-46_IN_+919737276726.amr (Read-only-Dateisystem)

Ich habe überprüft und die Datei, die verschoben werden soll, ist eine normale Datei und wird nicht nur gelesen, während sie von einem Call Recorder aufgezeichnet wird. Bitte helfen.

+0

anzeigen verwenden, wie Sie diese Funktion aufrufen. Zeigen Sie den Wert der Parameter an. – greenapps

+0

'dir.mkdirs();'. Überprüfen Sie den Rückgabewert, da das Verzeichnis möglicherweise nicht erstellt werden kann. Zeigen Sie in diesem Fall einen Toast auf den Benutzer an. Und zurück. Fahren Sie nicht fort, da es wenig Sinn macht, eine Datei in einem Verzeichnis zu erstellen, das nicht existiert. – greenapps

Antwort

0

In Android können Sie nicht direkt auf den Stamm (/) zugreifen, es ist schreibgeschützt montiert. Überprüfe deinen Pfad, du solltest nicht versuchen zu schreiben oder zu lesen.

+0

Ich greife nicht auf den Stammpfad zu, und sowohl der Quellpfad als auch der Zielpfad befinden sich im externen Speicher. Ich habe die Frage bearbeitet. –

0

Sie müssen sich fragen, ob Ihre Dateien für die "Außenwelt" verfügbar sein sollen oder nur von Ihrem Programm selbst benötigt werden. Abhängig von dieser Entscheidung haben Sie eine Reihe von Optionen:

Instanzen von Context (zum Beispiel Aktivität) wissen openFileOutput und openFileInput. Beide geben Streams zurück und können ohne weitere Berechtigungen verwendet werden. Sie können jedoch Dateien an für die App privaten Orten speichern.

Wenn Sie benötigen, dass die Dateien nur temporär verfügbar sein müssen, berücksichtigen Sie Context.getCacheDir. Oder der Java-Weg: File.createTempFile. Eine andere Methode, die es wert ist, betrachtet zu werden, ist Context.getExternalFilesDir.

Eine Randbemerkung: Statt Ihren Weg der Zusammenkleben von Hand schlage ich neue File("path", "dir").getAbsolutePath

Verwandte Themen