`

“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 file 文件复制

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

    Java对IO类File的操作

    对java.io.File类的操作

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

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

    java file,java读取txt文档

    java file,java读取txt文档,java操作txt文档,读取文档的内容

    java-io-file类笔记

    尽管java.io定义的大多数类是实行流式操作的,File类不是。它直接处理文件和文件系统。也就是说,File类没有指定信息怎样从文件读取或向文件存储;它描述了文件本身的属性。File对象用来获取或处理与磁盘文件相关的...

    java中的IO操作总结(四)

    java中的IO操作总结(四) 前面已经把java io的主要操作讲完了 这一节我们来说说关于java io的其他内容 Serializable序列化 实例1:对象的序列化 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23...

    java IO章节的总结

    IO从大的方向上分为字节流和字符流,包括四个抽象类: 1、输入:Reader, InputStream类型的子类(字符,字节) 2、输出:Writer, OutputStream类型的子类(字符,字节) 决定使用哪个类以及它的构造进程的一般...

    Java IO 体系.md

    - Java IO 的核心类 File - Java IO 流对象 - 字节流对象 - InputStream - OutputStream - 字符流对象 - Reader - Writer - 字节流与字符流的转换 - 新潮的 NIO - 缓冲区(Buffer) - 通道(Channel) ...

    Java基础IO流之File类的使用

    Java基础IO流之File类的使用

    java.io包中的File类.doc

    java.io包中的File类.doc

    Java IO流 File类的常用API实例

    主要介绍了Java IO流 File类的常用API实例的相关资料,需要的朋友参考下吧

    Java简单的文件IO程序

    java做的简单文件IO操作,实现文件的读写追加功能。 压缩包里面有程序运行时的截图。

    Java的IO流讲解代码: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型

    它包含了常见的IO类和方法的使用示例,旨在帮助理解和掌握Java中的输入输出操作。 包含: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型字节流、打印流、对象序列化流、字节数组流)...

    java io包课件

    了解java.io包 运用File类对文件或目录的属性进行操作 理解流,理解输入/输出流的概念 运用FileInputStream类和FileOutputStream类读/写字节文件 运用FileReader类和FileWriter类配合BufferedReader类和...

    2022年从File类开始java IO 系统介绍域名服务器教程.docx

    2022年从File类开始java IO 系统介绍域名服务器教程.docx

    Java之IO流学习总结

    Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据...

    java中IO流里面的关于File的讲解源码

    File关于IO流的源码,详细的讲解也有,很多的注释,适合初学者,本人也是初学者,慢慢学

    Java基础知识点总结.docx

    File类 102 Java.util.Properties 103 介绍IO包中扩展功能的流对象 103 十七、 网络编程 110 网络基础之网络协议篇 111 UDP传输 124 TCP传输 126 十八、 反射技术 127 十九、 Ajax原理及实现步骤★★★★★ 130 Ajax...

    java file list

    java file list java io file list shengsiyuan

Global site tag (gtag.js) - Google Analytics