首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android无法写文件解决思路

2012-05-02 
android无法写文件问一个很水很水的问题:android中,我要在mnt/sdcard/下面写文件,比如写入abc.txt中,可是

android无法写文件
问一个很水很水的问题:
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/下的文件里?

[解决办法]
File file = new File(Environment.getExternalStorageDirectory() + "/abc.txt");
[解决办法]
查看 e.PrintStackTrace 信息,看看是什么
[解决办法]
你要这样做:
1、判断目标文件是否存在,如果存在就先删除;
2、写文件。
[解决办法]
这句要改一下File myFile=new File("/sdcard/abc.txt");
改成:File myFile=new File(Environment.getExternalStorageDirectory() + "/abc.txt");


有出错的话把出错提示发上来。
 
[解决办法]
很简单,应该是你写的方法的问题,也许是哪一句写错了。。
给你一段代码,我以前用过的,没问题。

Java code
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();        }
[解决办法]
写权限问题需要注意一下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"      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> 


[解决办法]
不知道你是在android哪个版本下面?
/sdcard 的路径不要这样写(有可能是/mnt/sdcard)!要根据代码(Environment。。。。)去写获取sdcard的路径。
另外,注意#9楼的说法!

热点排行