处理Android:java.lang.IllegalArgumentException:文件包含路径分隔符

时间:2019-07-23 19:31:07

标签: android processing illegalargumentexception

我目前正在尝试在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

2 个答案:

答案 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上有这两个文件的许多示例。