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上工作(如果有的话)。
路径命令
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功能。
虽然你正在使用Windows,但用正斜杠替换所有反斜杠。“\”`可能会在它之后转义一个字符,而您不想要。 – darioo 2010-11-30 09:11:31
感谢您的评论。是个好主意。但我认为在我的情况下没有必要,因为路径不是硬编码的。 – LLS 2010-11-30 09:17:50
我已经上传了一个解释克里斯所说的答案。 – 2010-11-30 09:22:32