ANDROID - 在 sdcard 中创建文件夹和文本文件并将其写入

Posted

技术标签:

【中文标题】ANDROID - 在 sdcard 中创建文件夹和文本文件并将其写入【英文标题】:ANDROID - creating folder and text file in sdcard and write int it 【发布时间】:2014-12-24 08:04:19 【问题描述】:

我想在 sdcard 的文件夹中创建一个文本文件,然后在该文件中写入一些数据。我检查了很多页面,例如:

Saving to SD card as text file

https://***.com/questions/9480584/reading-and-writing-sd-card-in-three-text-files-and-updating-the-files-diff-dat

Write file to sdcard in android

writing to sdcard

我使用此代码创建文件和文件夹:

    try 
        File newFolder = new File(Environment.getExternalStorageDirectory(), "TestFolder");
        if (!newFolder.exists()) 
            newFolder.mkdir();
        
        Log.d(TAG, "TestFolder");
        try 
            file = new File(newFolder, "MyTest" + ".txt");
            file.createNewFile();
            Log.d(TAG, "MyTest");
         catch (Exception ex) 
            System.out.println("ex: " + ex);
        
     catch (Exception e) 
        System.out.println("e: " + e);
    

但是它会在手机内存而不是 sdcard 中创建文件。我使用了这些权限: 然后我用这段代码在同一个文本文件中写了一个小字符串:

    String str = "my_string";
    FileOutputStream outStream;
    try 
      outStream = openFileOutput(file.getName(), Context.MODE_PRIVATE);
      outStream.write(str.getBytes());
      outStream.close();
     catch (FileNotFoundException e) 
      e.printStackTrace();
     catch (IOException e) 
      e.printStackTrace();
    

但它不会在文本文件文件中写入任何内容。 我的代码有什么问题?

顺便说一下,我也使用了这些权限:READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE",READ_INTERNAL_STORAGE",WRITE_INTERNAL_STORAGE"

所以这不是许可的问题。

【问题讨论】:

你用的是什么安卓版本? 我使用姜饼进行开发,但我在两个使用 4.2.2 和 kitkat 的设备上检查我的应用程序 在 4.2.2 和 kitkat 设备上都出现问题?? 是的!!!我都检查了。 【参考方案1】:

作为the docs say,使用Environment.getExternalStorageDirectory() 并不能保证您将获得外部SD - 根据设备的不同,它可能是内部SD。

至于问题的文件写入部分,这是我的应用程序中的一些工作代码。它与您的 sn-p 非常相似,但使用的方法略有不同,并且没有明确设置权限(这可能是一个因素):

    File mFile = new File(path);
    OutputStream outputStream = null;
    try 
        outputStream = new FileOutputStream(mFile);
     catch (FileNotFoundException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    
    try 
        outputStream.write(obj.toString().getBytes());
     catch (IOException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    
    try 
        outputStream.close();
     catch (IOException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
      

【讨论】:

谢谢。我在两个有 SD 卡的不同设备上检查了我的应用程序!您的代码中的路径变量是什么?是“Environment.getExternalStorageDirectory().getAbsolutePath()”吗? 是的,我是这样理解的:String fullFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "myAppNameDirectory" + File.separator + myFilename; 在我的例子中,文件名是文件路径和文件名都作为一个字符串。 我完全使用了您的代码,但在日志中出现此错误:java.io.FileNotFoundException: /mnt/sdcard/TestFolder/Test.txt: open failed: EACCES (Permission denied)。我认为它尝试在外部存储器中查找文件,而应用程序在内部存储器中创建文件!!!在外部 SD 中创建文件和文件夹应该怎么做?我的设备有外部 SD 内存 使用 getExternalStorageState 进行测试。如果您没有恢复它已安装并具有读/写能力,请改用内部存储.. 我检查了它,它给出了“已安装”。有趣的是,我使用“/sdcard/”而不是getExternalStorageDirectory,但它在内部存储器中创建了文件夹!【参考方案2】:

使用 Environment.getExternalStorageDirectory() 并不能保证您将获得外部 SD,如果它没有外部 SD 卡,您可以使用应用缓存目录。 context.getCacheDir();

【讨论】:

我在两个有 SD 卡的不同设备上检查了我的应用程序。

以上是关于ANDROID - 在 sdcard 中创建文件夹和文本文件并将其写入的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 库中创建应用程序特定文件夹?

如何在android中创建视频预览?

在 /sdcard 中创建目录失败

我可以在 Android 中创建自定义图像 MIME 类型吗?

Android 外置SDCard读写权限总结

android之文件存储和读取