gpt4 book ai didi

java - 无法使用包含 '´' 和 'ñ' 字符的路径或文件名

转载 作者:太空宇宙 更新时间:2023-11-04 07:21:56 25 4
gpt4 key购买 nike

我的源代码中有一个方法用于处理目录路径和文件名。某些路径和文件名偶尔会用“´”或“ñ”字符书写。

问题是带有特殊字符的目录路径不被识别为目录,而是被识别为文件。我偶尔需要读取文件扩展名,当文件具有该字符时,代码不起作用并且无法达到扩展名。

public static void listarDirectorio(File f, String separador) {

File[] ficheros = f.listFiles();
File ficheroTratado = null;

logM.escribeLog(separador + "Ruta listada: " + f.getName(), false);

for (int x = 0; x < ficheros.length; x++) {

ficheroTratado = null;
ficheroTratado = ficheros[x];

if (!ficheros[x].isDirectory()) {
if (esBorrable(ficheroTratado.getName())) {
// logM.escribeLog(
// "Fichero borrado: " + ficheroTratado.getName(),
// true);
}
}

if (ficheros[x].isDirectory()
&& !ficheros[x].getName().startsWith("@")) {

String nuevo_separador;
nuevo_separador = separador + " # ";
listarDirectorio(ficheros[x], nuevo_separador);
}
}
}

public static boolean esBorrable(String nFichero) {
boolean esBorrable = false;

try {
String extension = "";
int extIndex = nFichero.lastIndexOf(".");
String ruta = "";

//logM.escribeLog("nombre de fichero: " + nFichero, false);
extension = nFichero.substring(extIndex, extIndex + 4);
//logM.escribeLog("extension que tengo: " + extension, false);

for (int i = 0; i < instance.getArrayExtensiones().size(); i++) {
ruta = "";
ruta = instance.getArrayExtensiones().get(i);

if (ruta.equalsIgnoreCase(extension)) {
//( logM.escribeLog("Este es borrable", false);
esBorrable = true;
} else {
esBorrable = false;
}
}
} catch (Exception e) {
logM.escribeLog("Problema al tratar el fichero: " + nFichero, false);
e.printStackTrace();
return false;
}

return esBorrable;
}

我希望你能帮助我解决这个问题。

最佳答案

好的,我已经复制了您的问题,但需要一些工作!当区域设置或 file.encoding 与文件名的编码不匹配时,就会出现此问题。请记住,在 Linux 中,文件系统名称只是一个 8 位字符串,并且没有强制编码。

复制:

  1. Linux 机器,可能带有 ext2/ext3 文件系统。在 Windows 7 x64 上没有问题
  2. 使用 Windows-1252/ISO-88591-15 编码创建一个名为“dirñ”的目录。这可以通过将您的术语模拟器(例如 Putty)设置为 Windows-1252 Translation,然后:mkdir dirñ 来完成。
  3. 将您的区域设置设置为“en_US.UTF-8”
  4. 运行您的 Java 应用程序
  5. 其中包含非 UTF-8 字符的目录将被归类为文件。

解决方案

事实证明这是一个已知的错误,但唯一的解决方案是使用 Java 7 的 NIO2 实现:http://jcp.org/en/jsr/detail?id=203我已经对此进行了测试,它确实按预期工作。在新的世界秩序中,您可以编写一个目录过滤器,如下所示:http://docs.oracle.com/javase/tutorial/essential/io/dirs.html#filter

替代解决方案是将所有文件名采用相同的编码(例如 UTF-8),并确保您的区域设置匹配。问题在于,如果您知道现有编码是什么并且在文件中保持一致,则只能转换为新编码。

关于java - 无法使用包含 '´' 和 'ñ' 字符的路径或文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19196498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com