私はこのコードを複数回実行し、最後に何が間違っているか分かりません。マニフェストの読み込み/書き込みの両方の権限を使用しますが、アンドロイドスタジオでこのプロジェクト: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();
}
}
});
}
}
最初の後に2番目の '!dir.exists()'チェックをお試しください。ディレクトリが作成されていることを確認してください。 mkdirs()が失敗した場合、 'FileOutputStream'はディレクトリを作成しません。 –
また、 'f'を宣言した後で' f.createNewFile(); 'を試してみてください。ファイルがすでに存在する場合は何もしません。 –