Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 突然可以';无法读取/写入文件_Java_Android_File - Fatal编程技术网

Java 突然可以';无法读取/写入文件

Java 突然可以';无法读取/写入文件,java,android,file,Java,Android,File,我正在制作一个android应用程序,它将数据保存到“设置”活动中的文件中。 我制作了一些自定义函数来简化文件的编写,它们位于一个类中,我的所有活动都从该类继承,包括“设置”活动 自定义功能: public void WriteToFile(String filename, String tag, String value) { try { FileOutputStream fileOut = openFileOutput(filename + ".txt", MODE_

我正在制作一个android应用程序,它将数据保存到“设置”活动中的文件中。
我制作了一些自定义函数来简化文件的编写,它们位于一个类中,我的所有活动都从该类继承,包括“设置”活动

自定义功能:

public void WriteToFile(String filename, String tag, String value) {
    try {
        FileOutputStream fileOut = openFileOutput(filename + ".txt", MODE_PRIVATE);
        OutputStreamWriter writer = new OutputStreamWriter(fileOut);
        writer.write(ReadFile(filename + ".txt") + tag + ":" + value + ";");
        writer.close();
    } catch (Exception e) {
        Toast.makeText(this, "ERROR: " + e.toString(), Toast.LENGTH_LONG).show();
        Log.e("Error writing: ", e.toString());
    }
}

public void WipeFile(String filename) {
    try {
        FileOutputStream fileOut = openFileOutput(filename + ".txt", MODE_PRIVATE);
        OutputStreamWriter writer = new OutputStreamWriter(fileOut);
        writer.write("");
        writer.close();
    } catch (Exception e) {
        Toast.makeText(this, "ERROR: " + e.toString(), Toast.LENGTH_LONG).show();
        Log.e("Error writing: ", e.toString());
    }
}

public String ReadFile(String filename) {
    try {
        FileInputStream fileIn = openFileInput(filename + ".txt");
        InputStreamReader InputRead = new InputStreamReader(fileIn);
        char[] inputBuffer = new char[10000];
        String content = "", readString;
        int charRead;
        while ((charRead = InputRead.read(inputBuffer)) > 0) {
            readString = String.copyValueOf(inputBuffer, 0, charRead);
            content += readString;
        }
        InputRead.close();
        return content;
    } catch (Exception e) { WipeFile(filename); return ""; }
}

public String FileValue(String filename, String tag, String defaultValue) {
    String[] content = ReadFile(filename + ".txt").split(";");
    for (String pair : content) {
        if (pair.split(":")[0].equals(tag)) return pair.split(":")[1];
    } WriteToFile(filename, tag, defaultValue); return defaultValue;
}
设置活动:

@Override
@SuppressWarnings("ConstantConditions")
protected void onCreate(Bundle savedInstanceState) {
    ToolbarTitle = "Settings";
    ActivityID = R.layout.activity_settings;
    ToolbarID = R.id.settings_toolbar;
    ToolbarIcon = R.mipmap.settings_icon;
    ActivityLayout = R.id.settings_layout;
    super.onCreate(savedInstanceState);

    if (prefs.getInt("LoggedinID", 0) == 0) findViewById(R.id.settings_user).setVisibility(View.GONE);

    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.settings_lowBattery, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    int spinnerPosition = adapter.getPosition(FileValue("settings", "Alert", "20%"));
    Spinner battery = ((Spinner) findViewById(R.id.settings_battery));
    battery.setAdapter(adapter);
    battery.setSelection(spinnerPosition);

    ((Switch) findViewById(R.id.settings_notifications)).setChecked(FileValue("settings", "Notifications", "1").equals("1"));

    findViewById(R.id.settings_ads).setVisibility((FileValue("settings", "Ads", "1").equals("1") ? View.VISIBLE : View.INVISIBLE));
}

@SuppressWarnings("ConstantConditions")
public void Apply(View view) {
    WipeFile("settings");
    WriteToFile("settings", "Notifications", (((Switch) findViewById(R.id.settings_notifications)).isChecked() ? "1" : "0"));
    WriteToFile("settings", "Alert", ((Spinner) findViewById(R.id.settings_battery)).getSelectedItem().toString());
}

public void Ads(View view) {
    Toast.makeText(this, "Just a prank, bro", Toast.LENGTH_SHORT).show();
    WriteToFile("settings", "Ads", "0");
}
@覆盖
@抑制警告(“恒定条件”)
创建时受保护的void(Bundle savedInstanceState){
ToolbarTitle=“设置”;
ActivityID=R.layout.activity\u设置;
工具栏id=R.id.settings\u工具栏;
工具栏图标=R.mipmap.settings\u图标;
ActivityLayout=R.id.settings\u布局;
super.onCreate(savedInstanceState);
if(prefs.getInt(“LoggedinID”,0)==0)findViewById(R.id.settings\u user).setVisibility(View.GONE);
ArrayAdapter=ArrayAdapter.createFromResource(此,R.array.settings\u电池电量不足,android.R.layout.simple\u微调器\u项);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
int spinnerPosition=adapter.getPosition(文件值(“设置”、“警报”、“20%”);
微调器电池=((微调器)findViewById(R.id.settings_电池));
电池。设置适配器(适配器);
电池组选择(喷丝头位置);
((开关)findviewbyd(R.id.settings_notifications)).setChecked(文件值(“设置”、“通知”、“1”)。等于(“1”);
findViewById(R.id.settings_ads).setVisibility((FileValue(“settings”,“ads”,“1”)。等于(“1”)?View.VISIBLE:View.INVISIBLE));
}
@抑制警告(“恒定条件”)
公共无效应用(视图){
文件(“设置”);
WriteToFile(“设置”、“通知”((开关)findViewById(R.id.settings_Notifications)).isChecked()?“1”:“0”);
WriteToFile(“设置”、“警报”((微调器)findViewById(R.id.settings\u电池)).getSelectedItem().toString());
}
公共无效广告(查看){
Toast.makeText(这是“只是恶作剧,兄弟”,Toast.LENGTH_SHORT).show();
写入文件(“设置”、“广告”、“0”);
}
奇怪的是,当它凌乱的时候,它都能工作,而不是在自定义函数中,你知道为什么吗

问题似乎出现在ReadFile函数中,其中InputRead.read(inputBuffer)返回-1(文件中没有数据)。
我甚至不知道在写入文件或读取文件时如何检查问题所在

谢谢

问题已解决
1.writer.write函数中的ReadFile函数无法打开并读取该文件,因为writer将其自身保持打开状态。

2.(filename+“.txt”)提供了相同的ReadFile函数,并在其中添加了“.txt”

问题似乎在于如何将文件附加到

在内部,写函数打开文件,然后在关闭文件之前,读函数打开并关闭同一文件。可能是读取函数在尝试打开文件时失败,因为该文件已打开,但尚未关闭。或者,当读取函数关闭文件时,它也会关闭写入函数的文件


因此,问题似乎是您希望在write函数中附加到文件,但实现得很差。您不需要将内容重写到文件中。您只需找到适当的标志即可打开文件进行附加

您应该使用java.util.Properties进行设置。它就像一张地图

要加载所有设置,请使用加载(读卡器)


要保存所有设置,请使用保存(OutputStream out,字符串注释)

文件是否已就位?“像没有你要找的文件这样的主题。@VladMatvienko嗯,它以前在没有文件的情况下工作过,它只是创建了一个文件。”。以防万一,我如何确保文件在那里或创建它?如果能看到正在工作的旧代码就好了。我能想到很多人。。。1) 该文件在您运行时未关闭,因此您无法添加任何信息。2) 文件在那里,您只是在文件浏览器中看不到它,因为它没有更新。@bremen_matt不幸的是,我删除了代码。。。。1) 如果这就是问题所在,那么在文件不可编辑的情况下,如何关闭该文件?2) 对不起,我不明白这一点只是你第一点的提示。。。在开发过程中,我使用dropbox文件夹,因为dropbox会自动保存web界面中最近的更改。好吧,这就是问题所在,谢谢你(也是我从你的评论中看到的一件小事,我想是一举两得)。谢谢你:DOh。。我不知道它的存在(很明显,我在这方面很新,对吧?),将在未来的项目中做,谢谢