2017-11-13 10 views
0

私はこのコードを複数回実行し、最後に何が間違っているか分かりません。マニフェストの読み込み/書き込みの両方の権限を使用しますが、アンドロイドスタジオでこのプロジェクト:FileOutputStreamを使用しています.FileNotFoundException

11-13 20:35:03.097 3691から3691/ir.atiafar.files W/System.errの: java.io.FileNotFoundException:/ストレージ/エミュレート/ 0/MYDIR/k.txt:オープン 失敗しました:ENOENT(そのようなファイルまたはディレクトリ)

ライン62によると:tv.setText(f.getCanonicalPat h());

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

最初の後に2番目の '!dir.exists()'チェックをお試しください。ディレクトリが作成されていることを確認してください。 mkdirs()が失敗した場合、 'FileOutputStream'はディレクトリを作成しません。 –

+0

また、 'f'を宣言した後で' f.createNewFile(); 'を試してみてください。ファイルがすでに存在する場合は何もしません。 –

答えて

0

あなたは#です...それは、ファイルのように見える/storage/emulated/0/mydir/(input_fileName).txt が作成されましたが、エラーは次の行から発生します。 た出力があります今月1234この問題があります。

他の人は、作成されていないファイルについては不平を言うが、作成されていないディレクトリについては苦情を言わなければならない。

mkdirs()の戻り値をチェックしていないので、失敗した場合は認識できません。

Android 6+のコードを追加して、マニフェストでリクエストした権限をユーザーに確認するように要求していないため、うまくいかない。

Google for runtime permission。

+0

行62によると:tv.setText(f.getCanonicalPath()); /storage/emulated/0/mydir/(input_fileName).txtファイルが作成されたように見えますが、エラーは次の行から発生します... –

+0

いいえ、あなたはナンセンスです。関係するファイルの作成はありません。ファイルの名前のみ。私があなたに提案したことをしてください。 – greenapps

+0

tnx buddyしかし私はマニフェストでパーミッションを使用していますが、何が間違っているのか本当に分かりません! –

関連する問題