【问题标题】:Processing Android: java.lang.IllegalArgumentException: File contains a path sepator处理Android:java.lang.IllegalArgumentException:文件包含路径分隔符
【发布时间】:2019-07-23 19:31:07
【问题描述】:

我目前正在尝试将一些值保存在 Processing 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

【问题讨论】:

  • 您的意思是写dataP 而不是data?顺便说一句,您确定这是一个有效的文件路径吗?
  • 这是一个我已经创建的目录(已经有一个data 文件夹,我想有一个专门用于此用途的文件夹)
  • 不,我不确定它是否是有效的文件路径。如果是这样的话,也许有人可以告诉我正确的吗?
  • 听起来 api 方法调用只需要一个文件名,但您正在传递一个文件路径
  • @Zohaib Amir 我已经看过这篇文章,但它对我在处理中的问题没有帮助,因为他们的网站和其他网站上的一些其他帖子告诉我可以使用 loadStrings /saveStrings具有绝对文件路径的函数。

标签: android processing illegalargumentexception


【解决方案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());

【讨论】:

    【解决方案2】:

    正如我发布的评论中的链接所述,loadStrings()saveStrings() 不采用绝对路径作为参数。这意味着它只能访问路径为“name.txt”而不是“folder/name.txt”的文件。如果您必须使用绝对路径,则必须使用 FileInputStream 和 FileOutputStream。 StackOverflow 上有很多这两个文件的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 2014-04-07
      相关资源
      最近更新 更多