创建的文件夹在文件资源管理器中不可见。

时间:2012-11-15 09:46:03

标签: android file sd-card createfile create-directory

我在SD卡上创建文件夹和文件时遇到问题。

以下是代码:

    File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() + "/folder");
    boolean success;
    if (!folder.exists()) {
        success = folder.mkdirs();
    }
    File obdt = new File(folder, "file.txt");
    try {
        success = obdt.createNewFile();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

使用此代码,我希望在SD卡的folder文件夹中创建文件夹Download,文件file。我希望用户可以访问该文件。所以我想把它放在一个共享文件夹中。
success变量为true,当我再次运行代码时,该文件夹已存在,并且不会进入if块。
但是我无法在文件浏览器中看到sdcard上创建的文件夹和文件。

信息:getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()返回storage/sdcard/Download

我与Galaxy Nexus合作。

7 个答案:

答案 0 :(得分:3)

该死! :)

现在我解决了我的问题......我误解了在文件系统中创建文件的操作。
当我谈到文件浏览器时,我的意思是操作系统的文件浏览器而不是DDMS中的文件浏览器:)。
我想当我创建一个文件时,我会在操作系统的文件浏览器中看到它,但是当设备连接到PC时,文件只能在DDMS文件浏览器中看到。
对不起,我是Android的新手;)

当应用程序独立运行而没有PC连接时,之后我连接到PC我看到创建的文件和文件夹当然:)

感谢您的帮助

答案 1 :(得分:0)

如果您还没有这样做,则需要通过将以下行添加到您的清单中,为您的应用提供写入SD卡的正确权限:

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

如果您已经这样做,请查看:

File obdt = new File(/sdcard/folder/file.txt)
try {
    success = obdt.createNewFile();
} catch (IOException e1) {
    e1.printStackTrace();
}

作品。

答案 2 :(得分:0)

来自logcat的任何错误?
另外:尝试类似Log.I(“PATHNAME”,folder.absolutePath());然后查看你的logcat以确定你在哪里创建你认为它的文件夹。

答案 3 :(得分:0)

试一试。

        File dir = new File(Environment.getExternalStorageDirectory()
                + "/XXX/Wallpapers/");
        File[] files = dir.listFiles();

        if (files == null)

        {
            int numberOfImages = 0;
            BitmapDrawable drawable = (BitmapDrawable) imageView
                    .getDrawable();
            Bitmap bitmap = drawable.getBitmap();
            File sdCardDirectory = Environment
                    .getExternalStorageDirectory();
            new File(sdCardDirectory + "/XXX/Wallpapers/").mkdirs();
            File image = new File(sdCardDirectory
                    + "/XXX/Wallpapers/Sample" + numberOfImages + ".JPG");

            boolean success = false;
            FileOutputStream outStream;
            try {
                outStream = new FileOutputStream(image);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
                outStream.flush();
                outStream.close();
                success = true;
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();

            }
            if (success) {
                Toast.makeText(
                        getApplicationContext(),
                        "Image saved successfully in Sdcard/XXX/Wallpapers",
                        Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(getApplicationContext(),
                        "Error during image saving", Toast.LENGTH_LONG)
                        .show();
            }

别忘了在清单

中添加权限
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

答案 4 :(得分:0)

您无法在资源管理器中看到文件夹/文件?也许是因为MediaScanner处于活动状态,但未添加文件。您可以在程序中执行此操作,也可以在手机设置中的某个位置切换Media Scanner。

MediaScanner

Trigger MediaScanner

答案 5 :(得分:0)

显然,MTP中存在已知错误。

Issue 195362 当使用USB电缆将手机连接到计算机时,所有使用MTP而非USB Mass Storage的手机都无法正确显示文件列表。在设备上运行的Android应用也无法看到这些文件。

实际上和2012年一样久了

答案 6 :(得分:0)

我遇到了同样的问题:尽管文件已刷新并关闭,但是创建的文件和文件夹在写入sdcard后不会立即显示!

它们不会通过USB或手机上的文件浏览器显示在您的计算机上。

我观察到三件事:

  1. 如果文件的绝对路径以/storage/emulated/0/开头,并不意味着它会在您的sdcard上-而是可能在您的主存储上。
  2. 如果您等待约5分钟,文件确实会开始通过USB(即Windows资源管理器和内置文件资源管理器)显示
  3. 如果您在终端机上使用adb shell ls /sdcard,则文件会显示!您可以使用adb pull ...立即获取文件。您可能也可以使用DDMS。

我使用的代码是:

        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(myArrayList);

        try {
            File externalDir = getExternalStorageDirectory();
            File newFile = new File(externalDir, "myfile.txt");
            FileOutputStream os = new FileOutputStream(newFile);
            os.write(json.getBytes());
            os.flush();
            os.close();
            Timber.i("saved file to %s",newFile.getAbsoluteFile().toString());
        }catch (Exception ex)
        {
            Toast.makeText(getApplicationContext(), "Save to private external storage failed. Error message is " + ex.getMessage(), Toast.LENGTH_LONG).show();
        }

        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(myArrayList);

        try {
            File externalDir = getExternalStorageDirectory();
            File newFile = new File(externalDir, "myfile.txt");
            FileWriter fw = new FileWriter(newFile);
            fw.write(json);
            fw.flush();
            fw.close();
            Timber.i("saved file to %s",newFile.getAbsoluteFile().toString());
        }catch (Exception ex)
        {
            Toast.makeText(getApplicationContext(), "Save to private external storage failed. Error message is " + ex.getMessage(), Toast.LENGTH_LONG).show();
        }

为什么会这样?好像您第一次体验它时就必须忍受的另一种“ Android主义”。