File.pathseperator java的奇怪行为

时间:2013-12-30 16:27:23

标签: java

我正在使用Java开发一个与文件关联的程序,因此我使用File.separator来管理它。

奇怪的事实是,无论我在哪里调用它,它都会返回\,因为我在Windows上工作,除了我使用它的最后一个函数。在那里,它返回;。我会给你一段我的代码,虽然我相信它不会有多大帮助。还有什么我应该知道解决这个问题吗?

 System.out.println("File:" +source+"\n");

     String filename= f.getName().substring(f.getName().lastIndexOf(File.pathSeparator)+1,f.getName().length());//here at printing I get /
     System.out.println("Filename:" +filename+"\n");

     InputStream is = null;
     OutputStream os = null;
     try {
            is = new FileInputStream(source);
            os = new FileOutputStream(output+ File.pathSeparator + filename);//here I get ;
            byte[] buffer = new byte[1024];
            int length;
            while ((length = is.read(buffer)) > 0) {
                os.write(buffer, 0, length);
            }
        } finally {
            is.close();
            os.close();
        }

1 个答案:

答案 0 :(得分:8)

不,File.pathSeparator 在Windows上 ;。例如,您可能有:

PATH=c:\Utils;c:\SomethingElse
Windows上的{p> File.pathSeparator;,Unix上为:

您正在考虑File.separator在Windows上为\,在Unix上为/

以下是一种简单的方法:

import java.io.File;

public class Test {
    public static void main(String[] args) throws Exception {
        System.out.println("File.separator is " + File.separator);
        System.out.println("File.pathSeparator is " + File.pathSeparator);
    }    
}

(在您的第一句话中,您甚至可以谈论File.separator - 然后您在代码中使用File.pathSeparator。)

请注意,如果您使用File类中的方法,通常根本不需要指定分隔符 - 很难确切地说明您要实现的目标,但我怀疑类似:

File file = new File(f.getName());
File outputFile = new File(output, file.getName());
// Now use outputFile

......会更好,更清洁。