java - 在 Android 上写入文件是不可能的

标签 java android android-external-storage

我使用以下代码将一些内容写入外部文件:

public class DiskWriter {

    public static String TAG = "DiskWriter";

    public static void writeStringToDisk(String jsonString) {
        File root = android.os.Environment.getExternalStorageDirectory();
        File dir = new File (root.getAbsolutePath() + "/JSONFolder");
        dir.mkdirs();
        DateFormat df = new SimpleDateFormat("yyyyMMdd-HHmmss.SSS");
        File file = new File( dir, "/json-" + df.format(new Date(System.currentTimeMillis())) + ".txt");
        Log.e(TAG, "Writing file to " + file.getAbsolutePath());
        try {
            file.createNewFile();
            FileOutputStream f = new FileOutputStream(file);
            PrintWriter pw = new PrintWriter(f);
            pw.println(jsonString);
            pw.flush();
            pw.close();
            f.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

此外,在我的 list 中,我添加了以下权限:

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

我还尝试了此代码的几种变体。然而,它根本行不通。这是输出:

E/DiskWriter: Writing file to /storage/emulated/0/JSONFolder/json-20190306-190419.289.txt
W/System.err: java.io.IOException: No such file or directory
W/System.err:     at java.io.UnixFileSystem.createFileExclusively0(Native Method)
W/System.err:     at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:281)
W/System.err:     at java.io.File.createNewFile(File.java:1345)
W/System.err:     at app.generic.logic.DiskWriter.writeStringToDisk(DiskWriter.java:28)
W/System.err:     at app.generic.logic.JSONParser.doInBackground(JSONParser.java:48)
W/System.err:     at app.generic.logic.JSONParser.doInBackground(JSONParser.java:36)
W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:333)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W/System.err:     at java.lang.Thread.run(Thread.java:764)

我在我的设备(Oneplus 6T)上使用 Android 9,但它没有 root 或类似的东西。

最佳答案

您需要请求在外部存储上写入的权限。仅仅在 list 中列出它是不够的。

查看权限系统的说明:https://developer.android.com/guide/topics/permissions/overview

有关如何请求权限的信息,请参阅 https://developer.android.com/training/permissions/requesting.html

关于java - 在 Android 上写入文件是不可能的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55029636/

相关文章:

android - 添加增强调试器以查看基于 Smack android 的 XMPP 客户端的数据包级别信息

android - 通过 WhatsApp 将图像发送给特定收件人 (Android)

android - 外部存储中 App 自身目录的路径

java - 如何保存图片并在电脑上访问它?

Java:将字符串转换为现有的最终对象

java - 需要在没有 wsdl 的情况下调用 soap ws

java - 语句 lambda 可以替换为表达式 lambda

java - 演示嵌套作用域的 Scala 代码在 Java 中的行为不同

android - 无法将数据插入到 Azure 移动应用程序上的表中

android - 无法使用 FileProvider 在 Android N 中打开外部存储文件