文件不是在android中创建的?

时间:2012-07-17 07:50:14

标签: android file permissions

当我尝试创建新文件时,收到错误消息。

代码:

try 
{
    File root = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
    Runtime.getRuntime().exec("chmod 777 " + root.getAbsolutePath());
    File myFile = new File(root,"createNew.txt");
    myFile.createNewFile();
}
catch(Exception e)
{
    Toast.makeText(getBaseContext(), e.getMessage(),Toast.LENGTH_SHORT).show();
}

错误讯息:

java.io.IOException: open failed: EACCES (Permission denied)

/mnt/sdcard权限为d---------

如何通过编程方式更改权限?如何解决?给我任何想法。

提前致谢。

请注意这一点:

当我在命令提示符中使用此代码时,文件已成功创建,该代码为:

`chmod 777 /mnt/sdcard`

4 个答案:

答案 0 :(得分:0)

使用它来创建文件:

FileOutputStream fos= new FileOutputStream(outputPath);
//fos.write(...);
fos.close();

正如Java Doc所说:

This method is not generally useful. For creating temporary files, use  
`createTempFile(String, String)` instead. For reading/writing files, use 
FileInputStream, FileOutputStream, or RandomAccessFile, all of which can create 
files. 

答案 1 :(得分:0)

我对您的模拟器文件系统有疑问,特别是SD卡是只读。所以你必须使它读写模式 ..

(如果你正在尝试模拟器

从一个shell启动模拟器后,登录到另一个shell&型

adb shell

您应该看到显示#prompt,这是您的设备(模拟器)shell。现在,在adb shell中键入以下命令。

mount -o remount rw /sdcard

现在将使用rw(读写)权限重新安装/ sdcard。

现在使用..

检查SD卡的权限
adb shell ls -l

了解更多信息Mount a filesystem read-write

答案 2 :(得分:0)

1 - 使用它来获取你的sdk目录:

Environment.getExternalStorageDirectory().getAbsolutePath();      

2 - 或者你的文件路径可能有一些非法字符(如空格),在这种情况下你需要用合法的等号替换它们。例如空格带有“\”。你可以看到这个页面:<登记/> Runtime.getRuntime().exec()
http://www.coderanch.com/t/498450/java/java/exec-command-not-able-deal
Runtime.exec on argument containing multiple spaces
Combine paths in Java

答案 3 :(得分:0)

try {
    File filename = new File(Environment.getExternalStorageDirectory() +
                             "/yourfilename.txt");
    filename.createNewFile();
    FileWriter writer = new FileWriter(filename2); 
    writer.write("Your content");
    writer.flush(); 
    writer.close();
} catch (IOException e) {
    ...
}