2017-01-03 92 views
0

我想在外部SD卡上的Android设备上创建一个简单的文本文件。我的代码,我总是得到错误:java.io.FileNotFoundException: /storage/emulated/0/SFX/TEST1.txt: open failed: ENOENT (No such file or directory)在Android的外部SD卡上通过FileOutputStream创建文本文件 - FileNotFoundException

我在清单文件

 Button btn = (Button)findViewById(R.id.btn_Save); 
     btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //mach was 
      StringBuilder sb = new StringBuilder(); 
      sb.append(txtName.getText().toString()); 
      sb.append(System.getProperty("line.separator")); 
      sb.append(txtMonteur.getText().toString()); 
      sb.append(System.getProperty("line.separator")); 
      sb.append(txtStraße.getText().toString()); 
      sb.append(System.getProperty("line.separator")); 
      sb.append(Energiearten); 

      File file; 
      FileOutputStream out; 
      try 
      { 
       file = new File(Environment.getExternalStorageDirectory(), "SFX/TEST1.txt"); 
       file.mkdirs(); 
       out = new FileOutputStream(file); 
       out.write(sb.toString().getBytes()); 
       out.close(); 

      } catch (IOException e) { 
       e.printStackTrace(); 

      } catch (Exception e) { 
       Toast.makeText(ZBewegung.this, "Error:" + e.toString(), Toast.LENGTH_LONG).show(); 
      } 
     } 
    }); 
+2

如果你在> = 23 API,你必须写检查许可代码也正在测试。如果没有,那么在这里发布你的错误日志。 – androidnoobdev

+1

[实现运行时权限](https://stackoverflow.com/questions/32635704/android-permission-doesnt-work-even-if-i-have-declared-it)。另请注意,您的代码不属于SD卡,因为[外部存储](https://commonsware.com/blog/2014/04/08/storage-situation-external-storage.html)不是[可移动存储](https://commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html)在大多数Android设备上。 – CommonsWare

+0

检查SD卡是否创建文件? –

回答

0
file = new File(Environment.getExternalStorageDirectory(), "SFX/TEST1.txt"); 
file.mkdirs(); 

设置<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>这将创建一个目录命名SFX/TEST1.txt,这是不是你想要的。

尝试:

File dir=new File(Environment.getExternalStorageDirectory(), "SFX"); 
dir.mkdirs(); 
file = new File(dir, "SFX/TEST1.txt"); 
+0

与您的代码,并通过实现这个(http://stackoverflow.com/questions/33666071/android-marshmallow-request-permission)我可以成功地写入内部存储(而不是可移动的SD卡)。任何建议如何写入这个SD卡?不getExternalStorageDirectory()是指SD卡? –

+0

@SepPei:“doesnt getExternalStorageDirectory()是指SD卡?” - 没有。正如我在对您的问题发表评论时指出的,[外部存储](https://commonsware.com/blog/2014/04/08/storage-situation-external-storage.html)不是[可移动存储](https: //commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html)。在Android 4.4+上,使用'getExternalFilesDirs()',并在返回列表中查找第二个或后续的File对象。这些应该在可移动存储上,指向你的应用可以读写的目录。 – CommonsWare