android API28:无法写入之前创建的文件

时间:2018-08-29 08:17:58

标签: java android

我有问题,我无法使用我的Android应用程序写入现有文件。按下按钮一次,创建文件并将行写入其中。但是在那之后按下按钮将无济于事。我真的找不到错误。

String filePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + File.separator + "test.txt";

在创建时,我会请求权限,这些权限也在manifest.xml中设置

        String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE};
    requestPermissions(permissions,1);

我的点击功能:

    View.OnClickListener myhandler2 = new View.OnClickListener() {
    public void onClick(View v) {
        try {
            final Path path = Paths.get(filePath);
            Files.write(path, Arrays.asList("line"), StandardCharsets.UTF_8,
                    Files.exists(path) ? StandardOpenOption.APPEND : StandardOpenOption.CREATE);
        } catch (final IOException e) {
        }

多次单击按钮并在单独的编辑器中打开文件后,仅显示第一行。但是Files.readAllLines(path).toString()显示了所有内容。

**编辑:**好,代码就像一个超级按钮。我已将手机插入计算机,并且仅当创建新文件时,刷新Windows下的目录才会显示。仅在拔出并重新连接手机后,文件更改才可见。有人对此行为有解释吗? ** EDIT2:**我使用Windows资源管理器导航到该文件,并使用texteditor打开了该文件。更改不可见。但是,使用android studio设备文件浏览器中的构建(查看>工具窗口>设备文件资源管理器)并在android studio中打开文件显示了所有更改。

1 个答案:

答案 0 :(得分:0)

您的代码吞没了可能包含错误原因的异常:

将此添加到您的应用中,然后查看错误消息是什么

    } catch (final Exception e) {
         // could be SecurityException some permission issu, IOException i.e file locked, invalid filePath
         Log.e("MyApName", "cannot append to '" + filePath+
                            "'", e);
    }