Java中通过文件路径分隔符分割文件路径

  最近遇到了一个坑,项目在windows环境下代码运行的没有问题,然后部署到linux环境上运行时却报错。排查之后发现是有关于分隔符的问题。
  在java中,一般为了避免windows系统和linux系统之间路径分隔符的差异,我们会使用File.separator来代替windows下的“\”或者Linux下的“/”,来表示文件路径。
  如果需要分割路径来获取文件(夹)名,可以使用String.split(String regex)方法,如果只用一个File.separator作为参数会抛异常。

        String separator = File.separator;
        String path = "E:\\Program Files (x86)\\IdeaProjects\\leetcode\\src\\test\\1.txt";
        for(String str : Arrays.asList(path.split(separator))){
            System.out.println(str);
        }

异常如下:



  这是因为在Windows下,File.separator是“\\”,经过转义识别为“\”,而String.split方法的参数应该要传入的是一个正则表达式字符串,传入“\”就会抛这个异常。因为在java中一个“\”代表的是转义字符。
  这个时候如果还是要进行分割需要再加上一个反斜杠,并且需要对这个反斜杠加一个转义字符“\”。即代码中“\\”代表一个反斜杠“\”。

  如果这样写的话双引号中的 \\ 会报错,因为idea预编译会报错:Illegal/unsupported escape sequence,即非法/不支持的转义序列错误,但是不影响程序运行。

  运行结果:


  我们还可以换种方式写:传入两个File.separator拼接起来作为参数,这样就不会预编译报错。


  运行结果是一样的:


  然而在Linux系统下,路径分隔符是“/”,分割的时候不需要转义,也就不需要加反斜杠,刚才那种写法就没办法在Linux系统中运行起来了。为了能够兼容Windows和Linux环境,可以使用正则表达式“/|\\\\”来完成。



  运行结果:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容