在android sd卡上创建的文件夹,但文件未创建

时间:2012-03-09 15:39:53

标签: android file-io

我想我已经查看了所有相关问题,但仍然无法使其发挥作用。

以下是代码:

File sdCard = Environment.getExternalStorageDirectory();  
File directory= new File (sdCard.getAbsolutePath() + appName);          
directory.mkdirs();     
File file = new File(directory,fileName);  

该文件夹已创建,但我收到一条错误消息,指出该文件不存在。 appName是一个包含文件夹名称的字符串,可以正常工作。 fileName是一个字符串,包含我想要包含的文件的名称。

我已将权限包含在清单中。

我做错了什么?

更新

代码尝试同时创建一个子目录和一个文件,这是隐藏的,因为代码使用的是命名的String而不是String文字。添加中间步骤来创建子目录解决了这个问题。

3 个答案:

答案 0 :(得分:3)

如果创建了目录,那么您就在正确的轨道上。在您的代码中,您实际上并未在SD卡上创建文件。如果您需要创建文件,请执行以下操作:

File sdCard = Environment.getExternalStorageDirectory();  
File file = new File(sdCard.getAbsolutePath() + appName + "/" + fileName);
directory.mkdirs();
file.createNewFile()

这只是名义上的。实际上将fileName分成单独的子文件夹和实际文件并单独处理它们会好得多。

答案 1 :(得分:1)

试试这个:

在此我创建了一个字符串的文本文件(.txt文件)。

public void createFileFromString(String text)
    {       
       File logFile = new File("sdcard/xmlresponseiphone.txt");
       if (!logFile.exists())
       {
          try
          {
             logFile.createNewFile();
          } 
          catch (IOException e)
          {
             // TODO Auto-generated catch block
             e.printStackTrace();
          }
       }
       try
       {
          //BufferedWriter for performance, true to set append to file flag
          BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true)); 
          buf.append(text);
          buf.newLine();
          buf.close();
       }
       catch (IOException e)
       {
          // TODO Auto-generated catch block
          e.printStackTrace();
       }
    }

测试一下,看看你错过了什么:)

答案 2 :(得分:0)

尝试这样的事情。在这种情况下,我正在保存图像!

用于创建目录:

File directory = new File(Environment.getExternalStorageDirectory()
                + File.separator + appName);
        directory.mkdirs();

并保存到它     public void save(位图图,上下文上下文,字符串名,字符串时间,现在布尔值)抛出IOException {

    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    graph.compress(Bitmap.CompressFormat.PNG, 100, bytes);

    // you can create a new file name "test.jpg" in sdcard folder.
    String fileName = "";
    if (now){
        fileName = getDateTime()+"_00"+".png";
    }
    else {
        fileName = time.replace(".txt", ".png");
    }
    File f = new File(Environment.getExternalStorageDirectory()
            + File.separator + "appName/" + fileName);
    f.createNewFile(); // write the bytes in file
    FileOutputStream fo = new FileOutputStream(f);
    fo.write(bytes.toByteArray());
}

我认为诀窍在于File.separator!