我一直在开发一个小应用程序,让我和我的 friend 们可以创建我们自己的虚拟抽认卡。这些卡片排列在映射到可通过 Spinner -s 访问的文本文件中。该应用程序的用户定义了他们自己的旋转器,从而定义了研究类别。
Activity 刚开始时,我使用扫描仪从名为SpinnersTXT.txt 的文本文件中读取,我逐行运行它,然后接受Name-Type-Elements 的严格语法,实例化文件中定义的 Spinner。但这并不完全重要。我实际上只是使用扫描仪
从文件中读入如果稍后添加一个新的 Spinner,其信息将添加到文本文件中。当我运行我的代码时,我没有遇到与我的异常处理未涵盖的任何内容相关的错误,但我知道新的 Spinner-info 没有被添加到 TXT 文件,和/或我的 Scanner没有访问正确的文件,因为没有添加 Spinner 对象(我确实记得 addView 对父 ScrollView 的调用)。
--> 所以首先我必须问这是否是内部存储的使用方式,我想从我的应用程序中访问和编辑这个文件,使用这个位置,可以吗?
除此之外,这是我尝试访问该文件并在文件不存在时创建它的代码。我从另一个 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 的新手,但即使在阅读了初学者书籍的章节后,我仍然看到如此多的输入和输出形式,我很容易感到困惑......但我觉得我必须为其 nextLine() 方法使用 Scanner ,尽管大多数示例甚至不接触扫描仪。
最后是我尝试写入该文件的代码(如果不存在则由我的 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 和语言的细微差别时。谢谢大家。
最佳答案
正如您在类似问题中所解释的那样,您不能将文件放在源项目下的任意位置并期望它们出现在设备上。您可以使用 Assets 等机制存储数据,但在运行时它将是只读的。要拥有可修改的初始化数据,您必须将其打包为只读形式,然后将其复制到文件系统以创建可修改的版本。或者您可以使用各种方法在运行时下载它。
这里的许多问题都详细介绍了这一点,尤其是关于数据库的问题,但是那里说明的解决方案基本上适用于任何类型的文件。
关于java - Android 文件 IO : I and O Accessing Different Files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22270687/