Java中getAbsolutePath的打印

时间:2015-09-02 08:48:27

标签: java intellij-idea

我的开发环境:Mac + IntelliJ Idea。

我在Java中练习File类。

public class FileDemo {
    public static void main(String[] args) throws IOException {
        File file = new File("/Users/Samuel/IdeaProjects/JavaFundamentals/src/aa/bb/test.txt");
        file.createNewFile();
        System.out.println(file.getAbsolutePath());
    }

}

结果为/Users/Samuel/IdeaProjects/JavaFundamentals/src/aa/bb/test.txt

没关系。但是在改变了路径后,打印变得很奇怪。

public class FileDemo {
    public static void main(String[] args) throws IOException {
        File file = new File("test.txt"); //notice this line
        file.createNewFile();
        System.out.println(file.getAbsolutePath());
    }

}

打印件为/Users/Samuel/IdeaProjects/test.txt

我对路径感到困惑。

4 个答案:

答案 0 :(得分:1)

因为/Users/Samuel/IdeaProjects/是相对路径,并且将相对于程序的工作目录创建文件(在本例中为CREATE PROCEDURE VarCharToNvarChar AS BEGIN DECLARE curChangeTypes CURSOR FOR SELECT column_name, table_name, character_maximum_length FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE='VARCHAR' AND table_name IN (SELECT DISTINCT table_Name FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE='VARCHAR'); OPEN curChangeTypes; DECLARE @cn VARCHAR(50), @tn VARCHAR(50), @cml INT; DECLARE @str VARCHAR(8000); FETCH NEXT FROM curChangeTypes INTO @cn,@tn,@cml; WHILE(@@FETCH_STATUS = 0) BEGIN IF(@cml = -1) SET @str = 'ALTER TABLE ' + @tn + ' ALTER COLUMN ' + @cn + ' NVARCHAR(MAX)'; ELSE SET @str = 'ALTER TABLE ' + @tn + ' ALTER COLUMN ' + @cn + ' NVARCHAR('+CAST(@cml AS VARCHAR)+')'; EXEC(@str); FETCH NEXT FROM curChangeTypes INTO @cn,@tn,@cml; END CLOSE curChangeTypes; DEALLOCATE curChangeTypes; END )。

答案 1 :(得分:1)

在第一种情况下,您在初始化中提供了full path。所以它正在打印完整的路径。在第二种情况下,您使用的是relative paths。它的基本路径是项目的主目录。

答案 2 :(得分:0)

1)当你在创建File对象时在File类构造函数中提供完整路径时,它将在所提到的路径上创建文件。

2)但是如果你没有提供完整路径,那么它将在你的.class文件所在的同一路径上创建文件。这是相对路径。

答案 3 :(得分:0)

您的项目文件夹是File类的主文件夹。这是File类的起始位置。如果你想要一个较低的文件夹,你需要指定你的路径,或者你可以使用:" new File(" ../"); 它位于文件夹" IdealProjects"的主要原因;是的,因为这是你项目的开始路径。