在指定目录中创建文件

时间:2012-12-03 11:14:48

标签: java android eclipse outputstream fileoutputstream

尝试在特定目录中创建文件,但它显示错误FileNotFound。为什么? 我用不可能的路径吗?我真的不知道,但似乎代码应该正常工作。

    String day=/1;
String zn="/zn";
    File_name=zn
String root= Environment.getExternalStorageDirectory().toString();            
    File_path=root+day;

        File file1 = new File(File_path,File_name);
        file1.mkdirs();
        if(!file1.exists()) {
            try {
                file1.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } 


        try {
            OutputStream fos= new FileOutputStream(file1);
            String l,d,p;
            l = lessnum.getText().toString();
            d = desc.getText().toString();
            p = place.getText().toString();

            fos.write(l.getBytes());
            fos.write(d.getBytes());
            fos.write(p.getBytes());

            fos.close();

5 个答案:

答案 0 :(得分:1)

更改您的代码,就像在SD卡上创建文件一样

String root= Environment.getExternalStorageDirectory().getAbsolutePath();
String File_name = "File_name.Any_file_Extension(like txt,png etc)";


File file1 = new File(root+ File.separator + File_name);
if(!file1.exists()) {
    try {
         file1.createNewFile();
       } catch (IOException e) {
          e.printStackTrace();
      }
} 

在目前你还缺少带文件名的文件扩展名,因此将zn字符串更改为zn="/zn.txt";

并确保您已在AndroidManifest.xml中添加了Sd卡权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

答案 1 :(得分:1)

首先制作一个目录

String root= Environment.getExternalStorageDirectory().toString();      
 String dirName =
     root+ "abc/123/xy"; 
     File newFile =  new File(dirName);
     newFile.mkdirs();

然后在该目录中创建一个文件

String testFile = "test.txt"; File file1 = new File(dirName,testFile); if(!file1.exists()){ try { file1.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

然后进行文件编写操作

try { OutputStream fos= new FileOutputStream(file1);

String l,d,p; l = lessnum.getText()。toString(); d = desc.getText()。toString();  p = place.getText()。toString(); os.write(l.getBytes()); fos.write(d.getBytes());  fos.write(p.getBytes());  fos.close(); }  catch(例外e){                 // TODO自动生成的catch块                 e.printStackTrace();             }

我认为这会对你有帮助......

...谢谢

答案 2 :(得分:0)

您需要通过将以下行添加到您的清单中,为您的应用提供写入SD卡的正确权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

然后检查http://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory%28%29

答案 3 :(得分:0)

String root= Environment.getExternalStorageDirectory().toString();      
     String dirName =
         root+ "abc/123/xy"; 
         File newFile =  new File(dirName);
         newFile.mkdirs();

         String testFile = "test.txt";
         File file1 = new File(dirName,testFile);
        if(!file1.exists()){
             try {
                file1.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  在清单文件上......

...谢谢

答案 4 :(得分:0)

这是您最近的尝试:

File_path = root + File.separator + day; 
File f_dir = new File(File_path); 
f_dir.mkdirs(); 
File file1 = new File(f_dir, File_name); 
if (!file1.exists()) { 
    try { 
        file1.createNewFile(); 
    } catch (IOException e) {
        e.printStackTrace(); 
    } 
}
try { 
    OutputStream fos= new FileOutputStream(file1); 

如果您向我们展示了完整的堆栈跟踪和错误消息,那么就更容易弄清楚出了什么问题,但我可以想到几种可能性:

  1. 您没有检查f_dir.mkdirs()返回的值,它可能会返回false以指示未创建目录路径。这可能意味着:
    • 目录已存在。
    • 存在某些东西,但它不是目录。
    • 由于多种可能原因之一,无法创建目录路径的某些部分。
  2. 如果任何存在且该对象指定的路径名​​,file1.exists()调用将返回true。事物存在的事实并不一定意味着你可以打开它来写作:
    • 它可以是一个目录。
    • 它可能是应用程序没有写入权限的文件。
    • 它可以是只读文件系统上的文件。
    • 还有其他一些事情。

  3. 如果我写这篇文章的话,我会这样写:

    File dir = new File(new File(root), day);
    if (!dir.exists()) {
        if (!dir.mkdirs()) {
            System.err.println("Cannot create directories");
            return;
        }
    }
    File file1 = new File(dir, fileName);
    try (OutputStream fos= new FileOutputStream(file1)) {
        ...
    } catch (FileNotFoundException ex) {
       System.err.println("Cannot open file: " + ex.getMessage());
    }
    

    我只在需要时尝试创建目录...并检查创建是否成功。 然后我只是尝试打开文件写入它。如果该文件不存在,则将创建该文件。如果无法创建,则FileNotFoundException消息应解释原因。

    请注意,我还更正了您在选择变量名时所犯的样式错误。