Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用模式匹配器为File.separator创建函数_Java_Regex_File_Separator_Matcher - Fatal编程技术网

Java 使用模式匹配器为File.separator创建函数

Java 使用模式匹配器为File.separator创建函数,java,regex,file,separator,matcher,Java,Regex,File,Separator,Matcher,在我的java项目上运行静态分析工具时会出现“文件分隔符中的可移植性缺陷”错误,我需要修复它。在我的代码中,我有文件不安全。我想使用一种方法将其转换为fileSafe(解释如下) 类似地,对于以下路径: // Case 2 //no platform independence, good for Unix systems File fileUnsafe = new File("/tmp/abc.txt"); // platform independent and safe to use acr

在我的java项目上运行静态分析工具时会出现“文件分隔符中的可移植性缺陷”错误,我需要修复它。在我的代码中,我有文件不安全。我想使用一种方法将其转换为fileSafe(解释如下)

类似地,对于以下路径:

// Case 2
//no platform independence, good for Unix systems
File fileUnsafe = new File("/tmp/abc.txt");

// platform independent and safe to use across Unix and Windows
File fileSafe = new File(File.separator+"tmp"+File.separator+"abc.txt");
在整个项目中,我有多个这样的文件地址,我需要创建一些转换方法,可以将此路径作为字符串,将file.separator附加到其中,然后返回它。像这样的-

File fileSafe = new File(someConversionMethod("/tmp/abc.txt"));
我尝试了这个方法,但在案例2中它给了我NullPointerException

public static String someConversionMethod(String target) {
        Pattern ptr = Pattern.compile("[\\\\\\\\|/]+");
        Matcher mtr = ptr.matcher(target);
        return mtr.replaceAll(File.separator + "" + File.separator);
    }
任何帮助,无论是修复这种方法或建议一个优雅的方式来处理这种情况将不胜感激


妮特-我提到过,但这对我的案子没有什么帮助

我会尝试将文件分隔符处的字符串拆分成这样的数组

String str = "/tmp/abc.txt";
String result = "";
String rgx = "\\\\|/";
String [] arrOfStr = str.split(rgx);;
然后可以使用for循环将
文件.separator
添加回。像这样:

    for (int i = 1; i < arrOfStr.length ; i++)
        result += File.separator + arrOfStr[i];
for(int i=1;i

我从索引1开始,因为结果字符串中的第一个斜杠会加倍。

由于这是一次性更改,您可以在Eclipse中使用regex find and replace

对于第一种情况: 使用正则表达式:
^File\sfileUnsafe\s=\snew File\(\”(?[^\/]+)\/(?[^\.]+)(?\.\w{3})\)

替换为:
File fileSafe=new File(“${folder1}”+File.separator+“${fileName}${extension}”)

对于第二种情况: 使用正则表达式:
^File\sfilesafe\s=\snew File\(\“/(?[^\/]+)\/(?[^\.]+)(?\。。。。。。。。。。。。。。。。。。。。。。。。。。{3})

替换为:
File fileSafe=new File(File.separator+“${folder1}”+File.separator+“${fileName}${extension}”)

如果您有多个文件夹,则可以继续此模式并修复它们


我承认,这不是一种简单直接的方法,但可以完成工作。

我不确定我们是否需要这种方法,因为如果您只使用/where,Java将在所有平台上正确运行。Java文件名中不需要使用反斜杠。如果是这样的话,那我们为什么还要文件呢。分隔符了吗?哪一个是用于Java编程的IDE?它支持正则表达式查找和替换吗?我正在使用Eclipse。它支持正则表达式查找和替换。忽略警告。这是错误的
/
是Java中独立于平台的路径分隔符。
    for (int i = 1; i < arrOfStr.length ; i++)
        result += File.separator + arrOfStr[i];