7

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

这是代码:

    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();
    }

使用此代码,我希望在 sdcardfolder的文件夹中创建文件夹,并在此文件中创建文件夹。我希望用户可以访问该文件。所以我想把它放在一个共享文件夹中。变量是, 当我再次运行代码时,文件夹已经存在并且不在 if 块中。 但是我在文件资源管理器中看不到 sdcard 上创建的文件夹和文件。 信息:退货Downloadfile
successtrue


getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()storage/sdcard/Download

我使用 Galaxy Nexus。

4

7 回答 7

3

该死!:)

现在我解决了我的问题......我误解了在文件系统中创建文件的操作。
当我谈到文件资源管理器时,我指的是操作系统的文件资源管理器,而不是 DDMS 中的文件资源管理器 :)。
我想当我创建一个文件时,我会在操作系统的文件资源管理器中看到它,但是当设备连接到 PC 时,文件只能在 DDMS 文件资源管理器中看到。
抱歉,我是 Android 新手 ;)

当应用程序在没有 PC 连接的情况下独立运行,然后我与 PC 连接时,我当然会看到创建的文件和文件夹 :)

感谢帮助

于 2012-11-15T10:46:16.757 回答
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();
}

作品。

于 2012-11-15T09:49:09.793 回答
0

您在资源管理器中看不到文件夹/文件?也许是因为 MediaScanner 处于活动状态,但没有添加您的文件。您可以在程序中执行此操作,也可以在手机设置中切换某处的媒体扫描仪。

媒体扫描仪

触发媒体扫描仪

于 2012-11-15T10:06:16.360 回答
0

logcat有什么错误吗?
其他:尝试类似 Log.I("PATHNAME",folder.absolutePath()); 然后查看您的 logcat 以确保您在哪里创建您认为的文件夹。

于 2012-11-15T09:51:13.930 回答
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" />
于 2012-11-15T09:55:47.213 回答
0

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

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

我观察到三件事:

  1. 如果文件的绝对路径以它开头/storage/emulated/0/并不意味着它会在您的 SD 卡上 - 它可能会在您的主存储上。
  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-isms”。

于 2018-08-09T22:07:07.290 回答
0

显然,MTP 中有一个已知的错误。

问题 195362 当手机使用 USB 电缆连接到计算机时,所有使用 MTP 而非 USB 大容量存储的手机都无法正确显示文件列表。在设备上运行的 Android 应用程序也无法看到这些文件。

它实际上和 2012 年一样古老

于 2016-02-09T01:10:05.807 回答