2017-11-13 8 views
0

Ich führe diesen Code viel Zeit und schließlich kann ich nicht herausfinden, was falsch ist, ich benutze beide Berechtigungen für das Lesen/Schreiben in Manifest, aber schließlich gibt es nur diesen Fehler jedes Mal, wenn ich laufe Dieses Projekt im android Studio:.FileNotFoundException in der Verwendung von FileOutputStream

11-13 20: 35: 03.097 3691-3691/ir.atiafar.files W/System.err: java.io.FileNotFoundException:/storage/emulierten/0/mydir/k.txt: open fehlgeschlagen: ENOENT (Keine solche Datei oder das Verzeichnis)

nach Zeile 62: tv.setText (f.getCanonicalPat h()); dem der Ausgang: /storage/emulated/0/mydir/(input_fileName).txt Es ist wie Datei sieht erstellt wurde, aber der Fehler auftritt, von der nächsten Zeile ...

public class MainActivity extends AppCompatActivity { 

    TextView input_fileName, input_content, tv; 
    Button btnWrite; 
    File extDir; 
    File dir; 

    String file_name, content ; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     input_fileName = (TextView) findViewById(R.id.edt_filename); 
     input_content = (TextView) findViewById(R.id.edt_content); 
     tv = (TextView) findViewById(R.id.tv); 
     btnWrite = (Button) findViewById(R.id.btn_writeFile); 

     extDir = Environment.getExternalStorageDirectory(); 
     dir = new File(extDir, "mydir"); 


     btnWrite.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       file_name = input_fileName.getText().toString().trim(); 
       content = input_content.getText().toString(); 

        if (!dir.exists()) 
         dir.mkdirs(); 

        file_name.replace(' ', '_'); 

        if (!file_name.endsWith(".txt")) 
         file_name += ".txt"; 

        File f = new File(dir, file_name); 

       try { 
        tv.setText(f.getCanonicalPath()); 
        FileOutputStream fos = new FileOutputStream(f); 
        fos.write(content.getBytes()); 
        fos.close(); 

        Toast.makeText(MainActivity.this, "File Created!", Toast.LENGTH_SHORT).show(); 

       } catch (IOException e) { 
        e.printStackTrace(); 
        Toast.makeText(MainActivity.this, "exception : " + e.getMessage(), Toast.LENGTH_LONG).show(); 

       } 
      } 
     }); 
    } 
} 
+0

Probieren Sie eine zweite '! Dir.exists()' Prüfung nach der ersten - Sind Sie sicher, dass das Verzeichnis erstellt wird? 'FileOutputStream' erstellt keine Verzeichnisse, wenn 'mkdirs()' fehlschlägt. –

+0

Versuchen Sie auch 'f.createNewFile();', nachdem Sie 'f' deklariert haben. Wenn die Datei bereits existiert, wird nichts unternommen. –

Antwort

0

Sie sind # 1234 diesen Monat mit diesem Problem.

Wie andere beschweren Sie sich über eine Datei nicht erstellt werden, aber Sie sollten sich über ein Verzeichnis beschwert haben, das nicht erstellt wurde.

Sie überprüfen nicht den Rückgabewert von mkdirs(). Wenn Sie also fehlschlagen, sind Sie sich dessen nicht bewusst.

Nun, es schlägt fehl, da Sie keinen Code für Android 6+ hinzugefügt haben, um den Benutzer aufzufordern, die angeforderten Berechtigungen in Manifest zu bestätigen.

Google für Laufzeitberechtigung.

+0

Nach Zeile 62: tv.setText (f.getCanonicalPath()); was die Ausgabe ist: /storage/emulte/0/mydir/(input_fileName).txt Es sieht aus wie Datei wurde erstellt, aber der Fehler tritt ab der nächsten Zeile ... –

+0

Nein. Sie reden Unsinn. Keine Erstellung einer Datei beteiligt. Nur ein Name für eine Datei. Bitte machen Sie die Dinge, die ich Ihnen vorgeschlagen habe. – greenapps

+0

tnx buddy, aber ich benutze Berechtigungen in manifest, ich weiß wirklich nicht, was los ist! –

Verwandte Themen