【问题标题】:Can't Get File to Write on Android Using FileWriter无法使用 FileWriter 在 Android 上写入文件
【发布时间】:2020-07-15 05:19:17
【问题描述】:

我是 Java 和 Android Studio 的新手,但我最近一直在自学。目前,我正在尝试弄清楚如何将简单的文本文档写入和读取到 Android 设备。

我在网上看到了几种不同的方法,但几乎所有方法都与写入和读取字节有关。在这个阶段我并没有真正理解所有这些,我只想写/读文本文档。我可以复制并粘贴我在网上看到的东西,看看是否可行,但我希望至少对代码的作用有一些了解。我尝试阅读在线文档以了解我看到其他人用来实现此目标的很多东西,但我发现很难理解。

当我将它放入我的 MainActivity.java 并运行模拟器时,我发现并在我的计算机上从命令行运行 Java 的解决方案无法正常工作。我不确定是文件路径问题还是权限问题,但我希望这里有人能告诉我为什么这段代码不会将文本文档写入 Android 内部存储。

package com.example.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Scanner;

public class MainActivity extends AppCompatActivity {
    static File testFile = new File("test_file.txt");
    static TextView textDisplay;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textDisplay = findViewById(R.id.textDisplay);
        saveData();
    }

    public static void saveData() {
        String text = String.format("%s,%s,%s,%s,%s", 7, 3, 4, 9, 2);
        try {
            FileWriter textWriter = new FileWriter(testFile);
            textWriter.write(text);
            textWriter.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void loadData(View view) {
        ArrayList<Integer> intList = new ArrayList<>();
        try {
            Scanner readFile = new Scanner(testFile).useDelimiter(",");
            while (readFile.hasNext()) {
                Integer data = Integer.parseInt(readFile.next());
                intList.add(data);
            }
            readFile.close();
            textDisplay.setText(intList.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

【问题讨论】:

  • 你在你的问题中写道:当我把它放在我的 MainActivity.java 中时它不起作用你能扩展吗?你有错误吗?文件没有被创建?是否已创建但为空?

标签: java android filewriter


【解决方案1】:

要写入和读取文件,首先我们需要清单权限,并且我们必须运行它。之后我们需要文件路径来保存文件并读取文件。解决这些问题你一定会成功。

【讨论】:

  • 这不是权限问题,我试图写入设备的内部存储,因此不需要权限。我确实必须了解上下文是如何工作的,这样我才能正确使用 getFilesDir。我已经成功了,非常感谢!!
【解决方案2】:

我认为你有两个问题:

要编写和读取文本文件,您将需要如下说明:how to read and write

但您还需要在活动中使用类似这样的代码来要求权限:

static void requestPermissoes(Activity act) throws Exception {
        try {
            ActivityCompat.requestPermissions(act,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
                            Manifest.permission.WRITE_EXTERNAL_STORAGE,
                            Manifest.permission.CAMERA,
                    }, 0x3);
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }

并在清单中添加一行具有权限:

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

注意:android 有不同的方式来引用外部存储(它不等于 android 中的 SD 卡外部就像您的应用程序文件的外部但不在 SD 卡中)尝试看看这个description

【讨论】:

  • 非常感谢!事实证明这不是权限问题,我现在只是尝试写入内部存储,我读取它不需要特殊权限。我的问题在于 getFilesDir 方法。我一直在尝试使用它,但无法让它工作。我没有正确理解上下文,但我能够进行一些更改,现在一切正常!!感谢您的时间和帮助! :)
猜你喜欢
  • 1970-01-01
  • 2014-03-13
  • 2012-07-08
  • 2015-11-24
  • 2020-09-29
  • 2011-03-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
相关资源
最近更新 更多