windows文件放在linux下就不好用,不知道为啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows文件放在linux下就不好用,不知道为啥相关的知识,希望对你有一定的参考价值。

我有个文件名是a.conf,在windows下编辑以后,替换在linux下就不能用。
我用dos2unix a.conf这个命令了,但是还是不能用。
谁帮我看看
我这个文件里面是xml
<?xml version = "1.0" encoding = "gb2312"?>

可能是字符编码的问题,windows下默认编码是GBK,但linux下可能是zh_CN.UTF-8。那个文件应该是个文本文件吧,可以在linux下用firefox打开试试。在Firefox中“查看”->“字符编码”设为简体中文(GBK),如果能看到内容的话,那就确定是编码的问题了。然后你可以在终端中export LANG="zh_CN.GBK",再用vim打开:vi a.conf,或者在vi中:set enc=GBK,应该就可以编辑了 参考技术A 每个文件,除了里面的文字内容外,还会有其他信息,这个一般是看不到的。
你在linux下把那个文件打开,看看文字内容是否有问题,重新保存下就好了。
参考技术B 兼容性问题吧

Java文件夹操作,判断多级路径是否存在,不存在就创建(包括windows和linux下的路径字符分析)

兼容windows和linux。

分析:

在windows下路径有以下表示方式:

(标准)D:\\test\\1.txt

(不标准,参考linux)D:/test/1.txt

然后在java中,尤其使用File对象在操作windows的路径时,非常的不好操作,因为不知道要用多少个斜杠“\\”来表示。

斜杠“\\”为转义字符(参考:http://www.cnblogs.com/EasonJim/p/6561576.html)。

而java的File对象上无论是windows还是linux,输入的路径不管标不标准,输出的路径都是当前系统的标准路径;但是,很奇怪的是用普通print打印的路径上,尤其是windows标准路径,和上面展示的一模一样;但反过来用打印出来的路径用在new File("D:\\test\\1.txt")却会提示反义字符报错。

经过研究,如果像windows下,这个方法在构造上只能识别类似这样的路径:D:\\\\test\\\\1.txt,而这个路径只是打印出来看到的,如果再把这个套入File对象进行构造时,也会报转义字符错误;要解决这个问题也就是说,File对象最终会识别双斜杠的路径,但是是转义后的双斜杠路径才能识别,最终要写成:D:\\\\\\\\test\\\\\\\\1.txt这样才是正确的。

以上分析windows的路径上对于以后路径的操作比较有帮助,比如切割路径的字符串时,这个路径在存入的变量时,是包含转义字符的,也就是要以“\\\\\\\\”四个斜杠为主才对。

还有一点需要注意的,由于上面列举的两个路径,在不标准的路径下近些切割找基点时,可以先用File对象取构造,然后获取绝对路径传入,这样输出的就是标准的路径,变量上也包含的正确的转义字符。

那么类似这样的路径问题,在linux下就不会出现,比如linux表示方式只有以下这种形式:

/users/jim/test/1.txt

可以看出,linux采用的反斜杠“/”,在字符上不是转义字符,所以File对象在输入和输出上都是原样输出。

使用技巧:很多时候我们一般是结合标准和非标准的路径结合一起,在通过File对象进行构造输出标准的路径,比如:D:\\\\\\\\test/abc

具体操作:

参考:http://zyjustin9.iteye.com/blog/2164934

代码如下:

  /**
     * 判断多级路径是否存在,不存在就创建 
     *  
     * @param filePath 支持带文件名的Path:如:D:\\news\\2014\\12\\abc.text,和不带文件名的Path:如:D:\\news\\2014\\12
     */
    public static void isExistDir(String filePath) {
        String paths[] = {""};
        //切割路径
        try {
            String tempPath = new File(filePath).getCanonicalPath();//File对象转换为标准路径并进行切割,有两种windows和linux
            paths = tempPath.split("\\\\\\\\");//windows            
            if(paths.length==1){paths = tempPath.split("/");}//linux
        } catch (IOException e) {
            System.out.println("切割路径错误");
            e.printStackTrace();
        }
        //判断是否有后缀
        boolean hasType = false;
        if(paths.length>0){
            String tempPath = paths[paths.length-1];
            if(tempPath.length()>0){
                if(tempPath.indexOf(".")>0){
                    hasType=true;
                }
            }
        }        
        //创建文件夹
        String dir = paths[0];
        for (int i = 0; i < paths.length - (hasType?2:1); i++) {// 注意此处循环的长度,有后缀的就是文件路径,没有则文件夹路径
            try {
                dir = dir + "/" + paths[i + 1];//采用linux下的标准写法进行拼接,由于windows可以识别这样的路径,所以这里采用警容的写法
                File dirFile = new File(dir);
                if (!dirFile.exists()) {
                    dirFile.mkdir();
                    System.out.println("成功创建目录:" + dirFile.getCanonicalFile());
                }
            } catch (Exception e) {
                System.err.println("文件夹创建发生异常");
                e.printStackTrace();
            }
        }
    }    

测试工程:https://github.com/easonjim/5_java_example/tree/master/dirtest

 

以上是关于windows文件放在linux下就不好用,不知道为啥的主要内容,如果未能解决你的问题,请参考以下文章

我想要在Linux环境下远程从windows下载一个文件到本地,我使用ftp和scp都不好用,求大神指点。

请问,如何在linux里下载文件?

PhpExcel类,在windows系统下能导出Excel文件,但是在linux下就不行,怎么回事?

Java文件夹操作,判断多级路径是否存在,不存在就创建(包括windows和linux下的路径字符分析)

Linux下 ZIP 到 Windows 下文件名乱码

Linux的office保存doc时出现中文乱码?