android无法写文件

zhang200410 2012-04-30 10:04:44
问一个很水很水的问题:
android中,我要在mnt/sdcard/下面写文件,比如写入abc.txt中,可是写了好几次代码,都是错误的,如下:
首先给予权限:
<user-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<user-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

然后是代码:
String sdStateString=android.os.Environment.getExternalStorageState();
if(sdStateString.equals(android.os.Environment.MEDIA_MOUNTED))
{
try{
File myFile=new File("/sdcard/abc.txt");
if(!myFile.exists())
{
myFile.createNewFile();
}

String szOutText="Hello,Woeld!";
FileOutputStream outputStream=new FileOutputStream(myFile);
outputStream.write(szOutText.getBytes());
outputStream.close();
}
catch (Exception e) {
// TODO: handle exception
}
}
通过调试发现,执行到时
a、myFile.createNewFile();(当sdcard中没有abc.txt而需要创建时)
b、FileOutputStream outputStream=new FileOutputStream(myFile);(当sdcard中已有了abc.txt时)
发生错误,跳出到catch中;不论是在模拟器上运行还是生成.apk在手机上都是这样

但是我读这个abc.txt文件是可以的,没问题。
请问怎么做才能写到mnt/sdcard/下的文件里?
...全文
497 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yao-Blog 2013-04-09
  • 打赏
  • 举报
回复
真是帮了大忙了,感谢各位大佬!!!
lazy_2010 2012-05-01
  • 打赏
  • 举报
回复
查看 e.PrintStackTrace 信息,看看是什么
zhang200410 2012-05-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

写权限问题需要注意一下uses-permission在manifest.xml中的位置。

XML code

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="byd.eagle"
……
[/Quote]
谢谢大家了,我晚上才来得及又看了一遍代码,确实是权限上弄错了,写的位置不对。用了eclipse的manifest.xml的添加permission的页面添加权限后就对了,谢谢大家了!
veryitman 2012-05-01
  • 打赏
  • 举报
回复
不知道你是在android哪个版本下面?
/sdcard 的路径不要这样写(有可能是/mnt/sdcard)!要根据代码(Environment。。。。)去写获取sdcard的路径。
另外,注意#9楼的说法!
念茜 2012-05-01
  • 打赏
  • 举报
回复
写权限问题需要注意一下uses-permission在manifest.xml中的位置。


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="byd.eagle"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".EagleBackup"
android:label="@string/app_name">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="8" />
</manifest>

伊茨米可 2012-05-01
  • 打赏
  • 举报
回复
很简单,应该是你写的方法的问题,也许是哪一句写错了。。
给你一段代码,我以前用过的,没问题。
String content = editText.getText().toString();
try {
/* 根据用户提供的文件名,以及文件的应用模式,打开一个输出流.文件不存系统会为你创建一个的,
* 至于为什么这个地方还有FileNotFoundException抛出,我也比较纳闷。在Context中是这样定义的
* public abstract FileOutputStream openFileOutput(String name, int mode)
* throws FileNotFoundException;
* openFileOutput(String name, int mode);
* 第一个参数,代表文件名称,注意这里的文件名称不能包括任何的/或者/这种分隔符,只能是文件名
* 该文件会被保存在/data/data/应用名称/files/chenzheng_java.txt
* 第二个参数,代表文件的操作模式
* MODE_PRIVATE 私有(只能创建它的应用访问) 重复写入时会文件覆盖
* MODE_APPEND 私有 重复写入时会在文件的末尾进行追加,而不是覆盖掉原来的文件
* MODE_WORLD_READABLE 公用 可读
* MODE_WORLD_WRITEABLE 公用 可读写
* */
FileOutputStream outputStream = openFileOutput(fileName,
Activity.MODE_PRIVATE);
outputStream.write(content.getBytes());
outputStream.flush();
outputStream.close();
Toast.makeText(FileTest.this, "保存成功", Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}


参考资料:http://blog.csdn.net/chenzheng_java/article/details/6214261

然后你写的时候可能会遇到写第一遍没问题,第二遍就覆盖了的情况。
这个处理也很简单,只需要在new的时候换一个file方法就可以了。
zhang200410 2012-05-01
  • 打赏
  • 举报
回复
还有,众位有没有能直接可以运行的关于在sdcard上写文件的android源代码直接发给我也可以,谢谢了!
AMinfo 2012-05-01
  • 打赏
  • 举报
回复
这句要改一下File myFile=new File("/sdcard/abc.txt");
改成:File myFile=new File(Environment.getExternalStorageDirectory() + "/abc.txt");


有出错的话把出错提示发上来。
zhang200410 2012-05-01
  • 打赏
  • 举报
回复
继续追问!还是有问题啊,要求求助啊。
我觉得
第一步,给予写sdcard的权限:上面已经写了——不知有没有错误?
第二步,判断有没有这个文件:
String sdStateString=android.os.Environment.getExternalStorageState();
if(sdStateString.equals(android.os.Environment.MEDIA_MOUNTED))
{
try{
File myFile=new File("/sdcard/abc.txt");
if(!myFile.exists())
{
myFile.createNewFile();
}
}
}
不知这一步有没有什么错误?比如 /sdcard/abc.txt 这个路径有没有什么错误?
而且,我的调试,如果sdcard中没有abc.txt这个文件,那么会运行到myFile.createNewFile();,但这步一运行就崩溃,跳出被catch
3、第三部,写入文件:
String szOutText="Hello,Woeld!";
FileOutputStream outputStream=new FileOutputStream(myFile);
outputStream.write(szOutText.getBytes());
outputStream.close();
貌似写入文件都是这么写的,可是我的一运行就错,到了FileOutputStream outputStream=new FileOutputStream(myFile);就错了,这不只是为什么。

求助啊,急求啊!

AMinfo 2012-05-01
  • 打赏
  • 举报
回复
你要这样做:
1、判断目标文件是否存在,如果存在就先删除;
2、写文件。
jayqean 2012-04-30
  • 打赏
  • 举报
回复
File file = new File(Environment.getExternalStorageDirectory() + "/abc.txt");
zhang200410 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

File file = new File(Environment.getExternalStorageDirectory() + "/abc.txt");
[/Quote]
这么改还是不对,我觉得者的很怪,我找了很多网上的说明,到我这都不对,不知道出在哪里有问题,

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧