`

“Java IO File 类”总结

    博客分类:
  • java
阅读更多
对程序语言设计者来说,设计一个令人满意的I/O(输入输出)系统,是件极艰巨的任务。


File类:
---一个File类的对象,表示了磁盘上的文件或目录(把这两类统称了,java会提供一种方式来区分我这个File到底是一个文件还是一个目录)。
---File类提供了与平台无关的方法来对磁盘上的文件或目录进行操作。
---File类直接处理文件和文件系统。
---File类没有指定信息怎样从文件读取或向文件存储。
---File类描述了文件本身的属性。
---File对象用来获取或处理与磁盘文件相关的信息,例如权限、时间、日期和目录路径。
---File类还可以浏览子目录层次结构。


Java.io包中的File类提供了与具体平台无关的方式来描述目录和文件对象的属性功能。其中包含大量的方法可用来获取路径、目录和文件的相关信息,并对他们进行创建、删除、改名等管理工作。因为不同的系统平台,对文件路径的描述不尽相同。为做到平台无关,在java语言中,使用抽象路径等概念。Java自动进行不同系统平台的文件路径描述与抽象文件路径之间的转换。
File类的直接父类是Object类。




路径分隔符:
对于Window系统,路径分隔符是”\”,但是在java里面”\”是表示转义字符的,”\”加上后面的第一个字符总是被java看做一个转义字符来看待,因此在Window系统下面开发时,在java代码里面不能用一个”\”来表示路径分隔,要想表示路径分隔只能用两个反斜杠”\\”来表示,第一个反斜杠表示转义字符,会将第二个反斜杠转义成一个反斜杠。例如java代码里面的路径要这样写c:\\com,表示我们系统实际路径里面的c:\com。这是第一种表示方式,第二种表示路径的方式为使用正斜杠,例如c:/com,因为除了windows以外其他的系统都是使用第二种方式来表示路径分隔符(第二种表示方式在windows系统里面也可以使用,但是它最常用的是第一种方式),只有windows特殊,它使用反斜杠(所以要对它进行单独处理)。推荐使用第二种方式,因为用第二种方式写出来的程序在所有系统上都能运行,而第一种方式写出来的程序只能在windows系统上运行,其他系统就不认了。
另外在开发中书写路径的时候表示中间的路径分隔符比较好的一种方法是使用File.separator这个静态的成员变量,它会根据当前系统自动的提供针对当前系统的正确的路径分隔符(使用它最好是在不涉及盘符的情况下,例如不能涉及到c盘或d盘等)




下面的构造方法可以用来生成File对象:
File(String directoryPath);
File(String directoryPath, String filename);
File(File dirObj, String filename)
这里,directoryPath是文件的路径名,filename是文件名,dirObj是一个指定目录的File对象。



File类里面这个构造方法:File(String parent,String child),这个构造方法主要用来构建File,使用这个构造方法的时候一般情况下第一个参数parent表示的是一个路径名称字符串,第二个参数child表示的是一个路径名称字符串。但在实际使用中只要两个参数能拼接成一个完整的路径和一个文件名字,它就能创建文件成功(针对在使用createNewFile方法的情况下来说,针对创建文件的情况下来说),例如:
File file = new File(“c:/abc”);
File file2 = new File(file, “xyz/hello.txt”);
File2.createNewFile();
这种情况下也能在c:/abc/xyz目录下正确创建hello.txt这个文件。但是这种情况下必须要求c:/abc/xyz这个目录是存在的,它才能给你正确的创建文件,否则会报错,它不会给你自动创建目录。使用File通过路径来创建文件,前提是目录层次必须已经存在,才能正确创建,否则会报错,因为目录不存在的话它给你拼接不出来这样的路径,它也不会给你自动创建这样的目录,所以报错。





File 的所有构造方法中,其实File(String parent, String child)和File(File parent, String child)这两个构造方法本质上是一样的,因为File也是通过String来创建的,所以本质相同。


File类只是用来表示路径名称字符串,至于表示的是目录还是文件就不知道了,它是这两种的统称,例如构建出来的File调用createNewFile()方法创建出来的是文件,而调用mkdir()方法创建出来的却是目录。所以File对象的表示只是一个统称,并不具体表示目录或是文件

File 类里面的createNewFile()方法是用来创建文件的,和创建路径无关;而里面的makdir()和makdirs()等方法才是用来创建路径的
例如:
File file = new File(“c:/abc”);file.createNewFile();创建出来的不是一个目录,而是一个未知的文件。
无论File类里面是怎么定义的,这两种方法一种是用来创建文件的,一种是用来创建目录的,这个是改变不了的。
例如:
File file = new File("c:/hello");
File file2 = new File(file, "xyz.txt");
file2.mkdir();//创建出来的是一个名称为“xyz.txt”的文件夹
File file3 = new File("c:/hello");
File file4 = new File(file3, "xyz/abc");
file4.createNewFile();//创建出来的是一个未知类型的名称为abc的文件


总结:构造出来的File对象无论调用createNewFile()方法来创建文件还是调用mkdir()方法来创建目录,需要新创建出来的文件或目录必须处于file里面的最后一层,也就是说file里面表示的需要新创建出来的文件或目录它们上面的所有目录(所有层次)都是存在的,否则会报错,因为运行的时候虚拟机给你拼接不出这样的路径。只有一种情况例外,就是利用mkdirs()方法创建目录的时候,它会将你在路径里面标注出来的所有层目录都创建,不管里面哪些已经有了或哪些没有。
例如:
File file = new File(“c:/abc/xyz/123.txt”);
file.createNewFile();//如果abc或xyz这几个目录中任何一个不存在的话就会报错
file.mkdir();//如果abc或xyz这几个目录中任何一个不存在的话就会报错
File file2 = new File(“c:/def”);
File file3 = new File(file2, “aaa/123.txt”);
file3.createNewFile();//如果def或aaa这几个目录中任何一个不存在的话就会报错
file3.mkdir();//如果def或aaa这几个目录中任何一个不存在的话就会报错
File file4 = new File(“c:/a/b/c/d/e”);
file4.mkdirs();//会将指定a,b,c,d,e里面没有的目录一一创建,不管哪些有了或哪些没有,没有的都会被创建,有的当然就不重复创建了





目录管理:
---目录操作操作的主要方法为:
---public boolean mkdir()根据抽象路径名创建目录。
---public String[] list()返回抽象路径名表示路径中的文件名和目录名(这个方法和listFile()方法非常类似,只是一个String[],另一个返回File[],根据自己的实际需求,方便用哪个就用哪个)。


文件管理:
---在进行文件操作时,常需要知道一个关于文件的信息。Java的File类提供了方法来操纵和获得一个文件的信息。另外,File类还可以对目录和文件进行删除、属性修改等管理工作。


总结:java中提供了一些方法来判断当前File是不是目录或者是不是文件,isDirectory()方法用来判断是否是一个目录,isFile()方法用来判断是否是一个文件。前提是这个路径必须存在,如果不存在的话这两个方法当然都返回false。在这个路径存在的情况下这两个方法其中一个返回true,另一个就返回false


File类定义了很多获取File对象标准属性的方法。例如getName()返回文件名,getParent()返回父目录名,exists()在文件存在的情况下返回true,反之返回false。然而File类是不对称的。说它不对称,意思是虽然存在允许验证一个简单文件对象属性的很多方法,但是没有相应的方法来改变这些属性。


对于File类的深入理解,需要详细查看API文档。

目录是一个包含其他文件和路径列表的File类。
当你创建一个File对象且它是目录时,isDirectory()方法返回true。这种情况下,可以调用该对象的list()方法来提取该目录内部其他文件和目录的列表。


假如我们有这样一种需求,假如我们有这样一个文件夹,里面有20个txt文件,50个java文件,我们想要从里面把50个java文件拿出来,怎么办呢?最繁琐的一种做法是通过list()方法获得里面所有文件的名称数组,然后一个个遍历,一个个来处理。但还有另一种比较简单的方式:使用list(FilenameFilter filter)。
如下面例子所示:
package com.shengshiyuan.io;

import java.io.File;
import java.io.FilenameFilter;

public class FileTest7 {
	public static void main(String[] args) {
		File file = new File("C:/hello/xyz");

		// 使用匿名内部类
		// FilenameFilter接口里面的accept方法就决定了什么样的文件应该包含到返回来的这个字符串数组里面,什么样的不应该包含。
		// 参数dir表示待测试的文件对应的目录,name表示待测试的文件名字本身
		// 这里编写的方法表示只返回file目录里面所有的java文件(以.java结尾)
		String[] names = file.list(new FilenameFilter() {
			public boolean accept(File dir, String name) {
				if (name.endsWith(".java")) {
					return true;
				}
				return false;
			}
		});

		// 打印测试
		for (String name : names) {
			System.out.println(name);
		}
	}
}

FilenameFilter仅定义了一个方法,accept()。该方法被列表中的每个文件调用一次。它通常的形式如下:
boolean accept(File directory,String filename)
当被directory指定的目录中的文件(也就是说,那些与filename参数匹配的文件)包含在列表中时,accept()方法返回true,当这些文件没有包括在列表中时,accept()返回false。


上述三种形式以File对象数组的形式返回文件列表,而不是用字符串形式返回。第一种形式返回所有的文件,第二种形式返回满足指定FilenameFilter接口的文件。除了返回一个File对象数组,这两个listFiles()方法就像list()方法一样工作。
第三种listFiles()形式返回满足指定FileFilter的路径名的文件。FileFilter只定义了一个accept()方法,该方法被列表中的每个文件调用一次。它的通常形式如下:
boolean accept(File path)
如果文件被包括在列表中(即与path参数匹配的文件),accept()方法返回true,如果不被包括,则返回false。

使用File类的delete()方法删除一个目录的时候,如果这个目录里面包含了目录或文件,这个目录是删不掉的,这个目录必须是一个空的才能被删除
分享到:
评论

相关推荐

    Java IO处理类的汇总

    Java IO处理类是Java平台中用于输入输出操作的核心部分,它允许程序与各种类型的输入源(如文件、网络连接)以及输出目标(如显示器、打印机)进行交互。本篇文章将全面解析Java IO处理类,包括基本概念、常用类库、...

    Java IO 工具类大全

    File类是Java IO中的基础类,它主要用于文件和目录的创建、删除、重命名以及属性查询等操作。例如,你可以使用`new File("path")`创建一个File对象,然后调用`exists()`检查文件是否存在,`mkdirs()`创建多级目录,`...

    java io file 文件复制

    java io file 文件复制,可直接运行。java io file 文件复制,可直接运行。

    《JAVA_IO流学习总结》

    总结来说,Java IO流是一个庞大的体系,覆盖了从基础的文件操作到复杂的网络通信,理解并熟练掌握这一部分将极大地提升Java开发者的技能。通过学习和实践,开发者可以灵活地处理各种数据输入输出场景,为应用程序...

    Java对IO类File的操作

    在Java编程语言中,`java.io.File`类是处理文件和目录的核心类。它提供了创建、删除、重命名文件和目录以及获取文件属性等操作。本文将深入探讨`File`类的基本使用方法,并通过分析提供的压缩包中的示例代码来展示...

    java file,java读取txt文档

    在Java中,`java.io.File`类是用于操作文件和目录的基本工具。它可以用来创建、删除、重命名文件,以及获取文件的属性信息,如大小、路径、最后修改时间等。 要读取一个TXT文档,我们需要使用Java的I/O流。这里主要...

    javaIO流File类的使用共3页.pdf.zip

    Java IO流中的File类是Java标准库中处理文件操作的核心类,它位于`java.io`包下。File类主要用于文件和目录的创建、删除、重命名等操作,以及获取文件的相关信息,如路径、大小、最后修改时间等。在Java程序中,File...

    java_IO完全总结

    Java的IO包中包含大量类和接口,其中流式部分是IO的主要内容,非流式部分包括File类、RandomAccessFile类等辅助类。 2. 非堵塞型IO(NewIO):主要包含在java.nio包中,采用了Observer模式来监测IO端口,有数据时...

    java IO.chm

    File类是Java IO中处理文件和目录的核心类,它可以用来创建、删除、重命名文件,以及获取文件属性等。FileInputStream和FileOutputStream则用于读写文件内容,而FileReader和FileWriter则用于处理字符编码的文件。 ...

    java中File类的使用方法 File类的

    Java 中的 File 类是 java.io 包中的一员,它提供了对文件和文件夹的操作。下面是对 File 类的使用方法的详细讲解。 构造函数 File 类有多个构造函数,分别是: * `public File(String pathname)`: 通过文件路径...

    Java教程之javaIO详解

    Java IO 中的 File 类、输入流和输出流是处理输入输出操作的基本类和方法,BufferedOutputStream、BufferedInputStream、DataOutputStream 和 DataInputStream 等过滤流提供了带缓冲的读写和基本数据类型的读写功能...

    javaIO流知识大总结

    在这个大总结中,我们将深入探讨Java IO流的基本概念、分类、常用类以及实践应用。 1. **基本概念** - **流(Stream)**:在Java中,流是一个抽象的概念,代表数据的有序序列。它可以是字节流或字符流,流向可以是...

    java IO章节的总结

    ### Java IO系统总结 Java IO(输入/输出)系统是Java平台的重要组成部分,它提供了用于文件和数据流处理的基础框架。根据数据传输的基本单位不同,Java IO系统主要分为两大类:字节流和字符流。这两类流又各自包含...

    Java IO知识点

    首先,File类是Java IO的基础,它可以表示文件或目录。通过File对象,我们可以执行一系列操作,如检查文件或目录的存在(exists())、判断类型(isDirectory(), isFile())、创建目录(mkdir(), mkdirs())、获取...

    JavaIO大部分类

    本篇将深入探讨Java IO中的核心类、流的概念、缓冲区技术以及NIO(New IO)框架。 1. **核心IO类** - `InputStream` 和 `OutputStream` 是所有字节流的基类,分别代表输入和输出。它们提供了读写单个字节的基本...

    java IO操作总结

    在Java中,可以轻松地创建和管理临时文件,这主要依赖于`java.io.File`类提供的方法。通过设置系统属性`TEMP`和`TMP`来指定临时文件的存储位置。`File.createTempFile(String prefix, String suffix)`方法用于创建一...

Global site tag (gtag.js) - Google Analytics