我目前正在尝试在Android处理中(APDE)的文本文件中保存一些值。我想稍后在另一个上下文中使用它,因此使用完整的文件路径很重要。来自loadStrings()的处理文档:
...或者,可以从本地任何位置加载文件 使用绝对路径的计算机(在Unix上以/开头的东西 和Linux,或Windows上的驱动器号)
因此必须可行。 我已经搜索了答案,但从未找到可处理的内容。 所以我的代码是:
String[] saveData;
int score;
void setup(){
saveData=loadStrings("/storage/emulated/0/dataP/hi.txt");
score=parseInt(saveData[0]);
fullScreen();
frameRate(60);
noStroke();
noSmooth();
textAlign(CENTER);
textSize(height/20);
}
void draw(){
background(0);
fill(255) ;
text(score, width/2,height/2);
}
void mousePressed(){
score--;
saveData[0]=str(score);
println(saveData[0]);
saveStrings("/storage/emulated/0/hi.txt" ,saveData);
}
,我收到以下错误消息:
java.lang.IllegalArgumentException: File
/storage/emulated/0/dataP/hi.txt contains a path separator
答案 0 :(得分:1)
我认为,这种混淆源于loadStrings()
方法在Java模式和Android模式下工作原理不同的事实。在Java模式下,绝对可以为loadStrings()
提供包含分隔符的绝对路径,但是在Android模式下,loadStrings()
仅在您仅指定不带分隔符的名称时才有效(默认情况下假定为查看数据文件夹)。因此,在loadStrings()中包含任何分隔符都会引发错误。
您可以尝试的一种简单的解决方法是,首先创建一个单独的path
变量:
String path = "/storage/emulated/0/dataP/hi.txt";
然后将其作为参数提供给loadStrings()方法:
saveData = loadStrings(path);
例如,如果要使用SD卡进行存储,则可以执行以下操作:
String SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
File file = new File(SDCARD + File.separator + "mytext.txt");
String[] s = loadStrings(file.getPath());
答案 1 :(得分:0)
正如我在评论中的链接中所述, loadStrings()和 saveStrings()并不将绝对路径作为参数。这意味着它只能访问路径为“ name.txt”而不是“ folder / name.txt”的文件。如果必须使用绝对路径,则必须使用FileInputStream和FileOutputStream进行操作。 StackOverflow上有这两个文件的许多示例。