2017-04-12 128 views
0

我正在使用HTC Desire 610进行Android开发。我按照其他问题的例子回答了相同的问题,但我所有的文件都保存在内部设备存储器中,而不是SD卡。手机可以识别SD卡,并且可以在手机内将文件传输到SD卡。文件保存到内部存储,而不是SD卡

我试图硬编码到SD卡的文件路径,我也尝试在没有插入计算机的情况下运行应用程序 - 一切都无济于事。我的应用程序能够将这些文件直接保存到SD卡是非常重要的。有任何想法吗?

public class MainActivity extends AppCompatActivity { 

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

    writeDataToFile("2394872934729348"); 

} 


public void writeDataToFile(String data){ 
    BufferedWriter bufferedWriter = null; 

    String dataOutFileName = Environment.getExternalStorageDirectory().getAbsolutePath()+"/data.txt"; 

    try{ 
     bufferedWriter = new BufferedWriter(new FileWriter(dataOutFileName,true)); 
     bufferedWriter.write(data); 
     bufferedWriter.flush(); 
    } 
    catch (IOException e){ 
     e.printStackTrace(); 
    } 
    finally { 
     try { 
      if(bufferedWriter != null){ 
       bufferedWriter.close(); 
      } 
     } catch (IOException e){ 
      e.printStackTrace(); 
     } 
    } 

    MediaScannerConnection.scanFile(this,new String[]{dataOutFileName}, null,null); 
} 
} 

编辑: 我现在尝试此。我得到一个FileNotFoundException异常,除非我直接写包文件(com.mypackage等)

File dataDir = new File("/storage/ext_sd/Data/"); 
    dataDir.mkdirs(); 
    File outputFile = new File(dataDir,"data.txt"); 

    try{ 
     FileOutputStream fos = new FileOutputStream(outputFile); 
     OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fos); 
     outputStreamWriter.write(data); 
     outputStreamWriter.close(); 

    } 
    catch (IOException e){ 
     Log.e("Exception", "File write failed: " + e.toString()); 
    } 
+2

代码中没有任何内容与[可移动存储](https://commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html)有关。您正在写作Android SDK引用的内容(外部存储器)(https://commonsware.com/blog/2014/04/08/storage-situation-external-storage.html)。使用'getExternalFilesDirs()'获取应用程序可以在外部和可移动存储上写入的位置。 – CommonsWare

回答

1

要访问外部存储上的专用存储目录,请使用getExternalFilesDirs()而不是getExternalStorageDirectory()。

它会返回一个数组,每个位置都有条目。数组中的第一个条目被认为是主要的外部存储,您应该使用该位置,除非它已满或不可用。有关详细说明,请参阅Android API指南中的Using the External Storage

+0

谢谢,这工作!是不是可以创建自己的目录,还是必须写入我的应用程序的包名称目录? – emhomm4

+1

不客气。当然你可以创建一个目录。检查[this](http://stackoverflow.com/questions/2130932/how-to-create-directory-automatically-on-sd-card)。 –

+0

每次我调用“getExternalFilesDirs()”时,它只会列出SD卡上我的应用程序包目录中的文件。它不会让我mkdir()在SD卡上,除非它在我的软件包目录中。 – emhomm4

0

你有没有给在AndroidManifest.xml您的应用程序正确的权限? 如果您还没有这样做的话,你就需要通过添加下面的清单中的线,让您的应用程序写入SD卡的正确权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

也许这就是问题所在

+0

我确实有这个,谢谢。 – emhomm4