1

我一直在开发一个小应用程序,以允许我和我的朋友创建我们自己的虚拟抽认卡。这些卡片排列在映射为通过Spinner -s 访问的文本文件中。应用程序的用户定义他们自己的微调器,从而定义研究类别。

首次启动活动时,我使用Scanner从名为SpinnersTXT.txt的文本文件中读取数据,我逐行运行它,并接受 Name-Type-Elements 的严格语法,实例化文件中定义的Spinner . 但这并不完全重要。我实际上只是使用扫描仪从文件中读取

如果稍后添加新的Spinner,则其信息将添加到文本文件中。当我运行我的代码时,我没有遇到与我的异常处理未涵盖的任何内容相关的错误,但我知道新的 Spinner-info 没有被添加到 TXT 文件中,和/或我的扫描仪没有访问正确的文件Spinner 对象没有被添加(我确实记得addView对父ScrollView的调用)。

这是我的文件路径设置,文件夹 Saves 包含我最初为空的 txt 文件

--> 所以首先我必须问这是否是内部存储的使用方式,我想从我的应用程序中访问和编辑这个文件,使用这个位置,可以吗?

除此之外,这是我尝试访问该文件并在它不存在时创建它的代码。我从另一个 stackoverflow 问题(我已经做过研究)中得出这个结论,但希望得到一些验证。

try{
        fileProcessorScanner = new Scanner("Saves/SpinnersTXT.txt");

    }catch(Exception e){
        e.printStackTrace();
        File path = new File(getFilesDir(),"Saves");
        path.mkdirs();
        File SpinnersTXT = new File(path,"SpinnersTXT.txt");
    }

--> 这段代码会成功获取文件吗?如果文件不存在,catch 会创建文件吗?我很抱歉我是 IO 新手,但即使在阅读了我的初学者书籍的章节后,我仍然看到如此多形式的输入和输出,我很容易感到困惑......但我觉得我必须使用 Scanner 的 nextLine() 方法,尽管大多数示例甚至都没有触及扫描仪。

最后,这是我尝试写入该文件的代码(如果不存在,则由我的 catch 创建):

outGoingSpinners = openFileOutput("SpinnersTXT.txt",MODE_WORLD_READABLE);
        outGoingSpinners.write(NEW_SPIN_OPEN.getBytes());
        outGoingSpinners.write(tempNewSpinnerName.getBytes());
        outGoingSpinners.write(tempNewSpinnerType.getBytes());
        outGoingSpinners.write(tempNewSpinnerInitializer.getBytes());
        outGoingSpinners.write(NEW_SPIN_CLOSE.getBytes());
        outGoingSpinners.close();

--> 这会将我的信息保存到与上面相同的文本文件中吗?我的转义序列会得到尊重和保存吗?

我真诚地感谢任何和所有的帮助。你们所有人都很有见地,这个社区使我的许多梦想成为现实。有时我只是迷失了方向,特别是在各种形式的 IO 和语言的细微差别下。谢谢你们。

4

1 回答 1

1

正如您在类似问题中所解释的那样,您不能将文件放在源项目下的任意位置并期望它们出现在设备上。您可以使用资产等机制存储数据,但在运行时它将是只读的。要拥有可修改的初始化数据,您必须将其打包为只读形式,然后将其复制到文件系统以创建可修改的版本。或者您可以在运行时使用各种方法下载它。

此处的许多问题都对此进行了详细介绍,尤其是有关数据库的问题,但是那里说明的解决方案基本上适用于任何类型的文件。

于 2014-03-08T17:36:40.017 回答