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 中创建文件夹和文本文件并将其写入的主要内容,如果未能解决你的问题,请参考以下文章