处理 - loadStrings() 不区分大小写

Processing - loadStrings() case-insensitive

有什么方法可以在忽略文件名大小写的情况下在 Processing 中加载文本文件?我正在打开多个 csv 文件,有些文件的扩展名是大写的“.CSV”而不是标准的“.csv”,这会导致错误,因为 loadStrings() 函数区分大小写。

String file = sketchPath("test.csv");
String[] array = loadStrings(file);

以上给出错误:

This file is named test.CSV not test.csv. Rename the file or change your code.

我需要一种方法来区分文件名或扩展名的大小写。有什么想法吗?

简短回答:否。case-sensitivity 文件来自操作系统本身。

更长的答案:您可以创建仅尝试从多个位置加载的代码。

另一种方法是使用 Java 的 File class,它具有列出目录下各种文件的功能,然后遍历它们并找到您想要的文件想。 the Java reference 中提供了更多信息,但它可能看起来像这样:

String[] array = null;
File dir = new File(sketchPath(""));
for(String file : dir.list()){
   if(file.startsWith(yourFileNameHere)){
      array = loadStrings(file);
      break;
   }
}

我还没有测试过这段代码,因此您可能需要尝试一下,但这是基本思路。当然,您可能只想提前重命名文件以避免此问题。

为什么不从错误本身获取新文件名?要将错误语句放入 String,我们需要将 loadStrings 包装在 trycatch 语句中。

String[] array;
String file = "heLlo.txt";
try {
  //if all is good then we load the file
  array = loadStrings(file);
}catch(Exception e){
  //otherwise when we get the error, we store it in a String
  String error = e.toString();

然后我们需要使用正则表达式从使用match的错误语句中获取文件名。正则表达式是 /named ([^ +])/(可以假定文件名中没有任何空格)。

  String[]matches = match(error, "named ([^ ]+)");

捕获组位于包含匹配项的数组中的元素 1 中。所以这将是 "real" 文件名,

  String realFile = matches[1];

最后我们加载真实文件并将其存储在我们的数组中。

  array = loadStrings(realFile);
}

当然,如果您愿意,您可以将所有这些放入一个函数中,这样您就不必在每次加载文件时都重复使用这段代码。但显然,如果您及时重命名或检查文件名,事情会更容易。