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

Posted

技术标签:

【中文标题】在 android sd 卡上创建文件夹,但未创建文件【英文标题】:Folder created on android sd card, but file not created 【发布时间】:2012-03-09 15:39:52 【问题描述】:

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

代码如下:

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

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

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

我做错了什么?

更新:

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

【问题讨论】:

如果您在 Windows 上工作,请为 Aleks G 答案添加两个 // 而不是一个! Eclipse 在 Windows 上,但我正在手机上调试。一个 / 应该做 - 对吧? 尝试使用类似的方法:File f = new File(Environment.getExternalStorageDirectory() + File.separator + "appName"); f.createNewFile();我认为 File.separator 很重要! 我把完整代码作为答案!这里很难看到! 【参考方案1】:

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

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

这只是名义上的。将您的fileName 实际分离到一个单独的子文件夹和实际文件中并分别处理它们会更好。

【讨论】:

感谢您的回答。我添加了这行代码,我仍然得到这些异常。 03-09 09:56:42.697: W/System.err(31125): java.io.IOException: 没有这样的文件或目录 03-09 09:56:42.707: W/System.err(31125): 在 java。 io.File.createNewFileImpl(Native Method) @user1244332 appName 和 filename 的值是多少?还有什么 sdCard.getAbsolutePath() 返回? appName = "/JoesHouse"。文件名 =“默认/text.txt”。 sdCard.getAbsolutePath() 返回 /mnt/sdcard。 directory.getAbsolutePath() 返回 /mnt/sdcard/JoesHouse。 出于好奇,我尝试使用 Quickoffice 将文件添加到文件夹中,并且成功运行,因此可以写入该文件夹。 @user1244332 好吧,您的“文件名”包含另一个目录名称 - 并且该目录不存在。我已经更新了我的答案,以说明你应该如何做你需要的。【参考方案2】:

试试这个:

在此我正在创建一个字符串的文本文件(.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();
       
    

测试一下,看看你缺少什么:)

【讨论】:

谢谢。我试图在创建文件的过程中创建一个目录。我对 java IO 很陌生【参考方案3】:

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

创建目录:

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

为了保存到它 public void save(Bitmap graph, Context context, String name, String time, boolean now) throws 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!

【讨论】:

以上是关于在 android sd 卡上创建文件夹,但未创建文件的主要内容,如果未能解决你的问题,请参考以下文章

android模拟器sd卡中使用

在 Android 应用程序中解压缩 sd 卡上的压缩文件

如何在 Android 中获取 SD 卡上文件夹的大小?

Android (Studio) FileNotFoundException 但文件在 SD 卡上

如何从 Android API 24+ 在 SD 卡上写入文件

Android:从 sd 卡上的特定位置获取缩略图