`

java.io.File类介绍

 
阅读更多

 

File是用于表示或者说映射实际文件系统对象,如文件或目录。这样java代码就能操作计算机上的文件系统对象了。像setReadOnly()方法等一看就是设置该文件对象为只读。

File类的实例是不可变的;也就是说,一旦创建,File对象表示的抽象路径名将永不改变。

 

 

File类内部维护一个FileSystem接口的实现类,这个实现类非常重要,File许多方法的具体操作都是由这个FileSystem实现类完成的。不同操作系统文件系统不一样,那各自的JDK的FileSystem实现类也自然不一样。我用的是Windows系统,它的实现类就是WinNTFileSystem。

 

File类主要由两个属性path、prefixLength。代表文件对象路径,以及前缀长度(这个前缀长度表示了路径是绝对还是相对的)。新建一个File实例时就是调用FileSystem实现类来操作这两个属性、

 

public File(String pathname) {
        if (pathname == null) {
            throw new NullPointerException();
        }
//将路径标准化(比如规范路径字符串之间的分隔符等)
        this.path = fs.normalize(pathname);
//判断前缀长度
        this.prefixLength = fs.prefixLength(this.path);
    }

 

 

想看着个File对象到底对应文件系统哪个对象,可以调用getAbsolutePath()方法查看

 

public String getAbsolutePath() {
        return fs.resolve(this);
    }


//WinNTFileSystem中resolve方法
public String resolve(File f) {
        String path = f.getPath();
        int pl = f.getPrefixLength();
        if ((pl == 2) && (path.charAt(0) == slash))
            return path;                        /* UNC */
        if (pl == 3)
            return path;                        /* Absolute local */
        if (pl == 0)
            return getUserPath() + slashify(path); /* Completely relative */
        if (pl == 1) {                          /* Drive-relative */
            String up = getUserPath();
            String ud = getDrive(up);
            if (ud != null) return ud + path;
            return up + path;                   /* User dir is a UNC path */
        }
        if (pl == 2) {                          /* Directory-relative */
            String up = getUserPath();
            String ud = getDrive(up);
            if ((ud != null) && path.startsWith(ud))
                return up + slashify(path.substring(2));
            char drive = path.charAt(0);
            String dir = getDriveDirectory(drive);
            String np;
            if (dir != null) {
                /* When resolving a directory-relative path that refers to a
                   drive other than the current drive, insist that the caller
                   have read permission on the result */
                String p = drive + (':' + dir + slashify(path.substring(2)));
                SecurityManager security = System.getSecurityManager();
                try {
                    if (security != null) security.checkRead(p);
                } catch (SecurityException x) {
                    /* Don't disclose the drive's directory in the exception */
                    throw new SecurityException("Cannot resolve path " + path);
                }
                return p;
            }
            return drive + ":" + slashify(path.substring(2)); /* fake it */
        }
        throw new InternalError("Unresolvable path: " + path);
    }

 可以看到当前缀长度为3时,表示生成对象时使用绝对路径(暂称为传递路径),FIle对象对应文件系统对象的路径就是标准化后的传递路径

前缀长度为1时,传递路径为带斜杠的相对路径,那对应文件系统对象的路径就是工作目录(什么是工作目录后面解释)的根目录(即所在盘符位置)+标准化的传递路径

前缀长度为0时,传递路径为不带斜杠的相对路径,对应文件系统对象路径就是标准化后的工作目录+标准化的传递路径

 

 

工作目录即System.getProperty('user.dir')的值。这个值就是调用java命令的目录,比如cmd中执行一个class文件,值就是执行命令时所在目录。而在tomcat运行web项目,一般是tomcat目录/bin/startup.bat调用命令,则值就是bin目录。

如果是eclipse 新建的tomcat server ,默认为Working Directory ----- eclipse的目录,可以设置 eclipse下右击tomcat server 点击Open(有可能需要先stop)General Information 下的Open Lauch Configuration的Working directory 设置该路径

idea运行web应用时值默认是配置的tomcat server的bin目录,idea运行java应用时值默认是项目所在目录位置,当然可以通过Edit Configuration中的Working directory来配置

 

 

 

分享到:
评论

相关推荐

    java.io包中的File类.doc

    Java.io 包中的 File 类 Java.io 包中的 File 类是 Java 语言中代表磁盘文件本身的对象,定义了一些与平台无关的方法来操纵文件。通过调用 File 类提供的各种方法,能够完成创建、删除文件,重命名文件,判断文件的...

    java.io:clojure.java.io 的 JK7 java.nio.file.Path 兼容性

    java.io clojure.java.io 的 JK7 java.nio.file.Path 兼容性依赖信息该库托管在 Releases 上。 依赖: [me.moocar/java.io " 0.1.0 " ]用法是 JDK7 中引入的文件路径的抽象。 这个库提供了和 Paths 之间的兼容性。 ...

    java.io.FileNotFoundException: *****(Too many open files)

    在Java编程中,"java.io.FileNotFoundException: ***** (Too many open files)" 是一个常见的错误,意味着程序尝试打开的文件数量超过了操作系统的限制。这个错误通常出现在处理大量文件或长时间运行的程序中,尤其...

    Java.nio 与Java.io比较

    在探讨Java.nio与Java.io之间的比较时,我们首先需要理解这两个包在Java编程语言中的核心作用和它们各自的优势。Java.io和Java.nio是Java中处理输入/输出操作的两个主要框架,它们各自拥有独特的特性和应用场景。 #...

    java file,java读取txt文档

    File file = new File("path_to_your_file.txt"); // 使用FileReader创建字符输入流 FileReader fr = new FileReader(file); // 增加缓冲区,提高读取效率 BufferedReader br = new BufferedReader(fr); //...

    java.io.Serializable序列化问题

    序列化的核心接口是 `java.io.Serializable`,它是一个标记接口,没有定义任何方法,用于标记可以被序列化的类。 #### 二、实现序列化的方法 为了使一个类支持序列化,需要让该类实现 `Serializable` 接口。实现这...

    android 串口驱动

    import java.io.File; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream...

    Java简单的文件IO程序

    首先,Java中的文件IO操作主要依赖于`java.io`包中的类,如`File`、`FileReader`、`FileWriter`、`BufferedReader`和`BufferedWriter`等。在描述中提到的`File`类是Java中的核心类,用于表示文件和目录路径名的抽象...

    java_io.rar_java 文件操作_java 读取 本地文件_java.io转动_文件操作

    import java.nio.file.*; public class FileMoveExample { public static void main(String[] args) { Path source = Paths.get("path_to_source_file"); Path target = Paths.get("path_to_target_file"); ...

    java.io的基础应用

    在Java中,IO操作主要分为字节流和字符流两大类,分别由`java.io.InputStream`和`java.io.OutputStream`以及`java.io.Reader`和`java.io.Writer`作为基类。字节流处理的是8位的字节,而字符流处理的是16位的Unicode...

    java.io包详细解说

    InputStream fis = new FileInputStream("file.txt"); InputStream bis = new BufferedInputStream(fis); ``` 在Java IO包中,还有许多其他的类,如DataInputStream和DataOutputStream,它们用于读写基本数据类型;...

    Java IO 基础操作(文件读写和移动)

    在Java中,我们可以使用`java.io.File`类来创建、删除、重命名或检查文件是否存在。例如,创建一个新文件的代码如下: ```java File file = new File("newFile.txt"); file.createNewFile(); ``` 如果要移动文件,...

    java常用的工具类整理28个

    以上是Java中28个常用工具类的简要介绍,每个类都有丰富的功能,掌握并灵活运用它们,将极大提升你的Java编程能力。在实际开发中,根据具体需求选择合适的工具类,可以编写出高效、简洁的代码。

    org.apache.commons.io.FileUtils

    Apache Commons IO库中的`org.apache.commons.io.FileUtils`类是一个非常实用的工具类,它提供了大量方便、高效的方法,用于处理...使用Apache Commons IO库,特别是`FileUtils`类,可以显著提升Java项目的开发效率。

    优雅的操作文件:java.nio.file 库介绍.pdf

    `java.nio.file.Files`是一个实用工具类,提供大量静态方法来执行各种文件系统操作。例如: ```java import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file....

    JBuider第八章:Java.io包.rar

    Java.io包是Java编程语言中的核心包之一,它包含了用于输入/输出操作的类和接口。这个包在Java中扮演着至关重要的角色,因为它提供了处理数据流、字符流、对象序列化、文件读写以及与操作系统交互的各种工具。在本...

    java.io的吐血实用例子

    在Java编程语言中,`java.io`包是用于输入/输出(I/O)操作的基础部分,包含了许多类和接口,使得开发者能够处理数据流、字符流、对象序列化、磁盘文件以及网络连接等任务。本篇文章将深入探讨`java.io`包中的关键概念...

    java.io详解

    ### Java IO流详解 #### 一、Java IO流概述 ...通过以上详细介绍,我们可以清晰地理解Java IO流的分类、特点及应用原则,同时掌握了`File`类的基本操作方法,这对于日常开发中处理文件和目录操作有着至关重要的作用。

Global site tag (gtag.js) - Google Analytics