getCanonicalFile和getAbsoluteFile返回当前(项目)目录而不是预期的目录

getCanonicalFile和getAbsoluteFile返回当前(项目)目录而不是预期的目录

问题描述:

我试图做一个简单的程序,其中包含浏览本地文件系统的功能。getCanonicalFile和getAbsoluteFile返回当前(项目)目录而不是预期的目录

但是,我直接输入地址时遇到了问题。

public void setWorkingDirectory(File newDir) 
{ 
    try 
    { 
     //try to eliminate redundancy 
     this.workingDir = newDir.getCanonicalFile(); 
    } 
    catch (IOException e) 
    { 
     this.workingDir = newDir; 
    } 
} 

我需要在屏幕上显示绝对路径。所以我用getCanonicalFile()。除了当我输入“D:”时,workingDir将被设置为Eclipse中的当前项目目录(我认为它应该是独立执行时的当前目录,例如“D:\ EclipseWorkspace \ workspace \ FTPClient” )但File newDir包含完全相同的路径(“D:”)(我追踪它)。

如果我输入“C:”或“D:\”,那么一切都很好。我无法在互联网上找到关于此的任何信息。任何人都可以告诉我这里发生了什么,以及如何解决问题?

在此先感谢。

编辑:我在使用Java 6的Windows XP SP3上工作(如果有的话)。

+0

虽然你正在使用Windows,但用正斜杠替换所有反斜杠。“\”`可能会在它之后转义一个字符,而您不想要。 – darioo 2010-11-30 09:11:31

+0

感谢您的评论。是个好主意。但我认为在我的情况下没有必要,因为路径不是硬编码的。 – LLS 2010-11-30 09:17:50

+0

我已经上传了一个解释克里斯所说的答案。 – 2010-11-30 09:22:32

路径命令

D: 

指示改变到当前选择的目录磁盘上d

鉴于

D:\ 

指示改变到磁盘d根目录

这是基本的Windows,您将在(CMD)控制台窗口中获得相同的结果。

如果确实存在问题,您需要查看文件名并查看它是否以File.separator结尾,如果不是,请追加一个。

不知道如何解释它,getCanonicalFile()使用getCanonicalPath()这实质上是调用FileSystem.canonicalize(String path)方法(这是一个抽象方法)。

在Windows中,java.io.Win32FileSystem.canonicalize(String path)(延伸java.io.FileSystem)称,从本质上讲,的2种本地方法之一:

protected native String canonicalize0(String path) 

OR

protected native String canonicalizeWithPrefix0(String canonicalPrefix, String pathWithCanonicalPrefix) 

所以,克里斯说,这是基本Windows功能。