本文共 9756 字,大约阅读时间需要 32 分钟。
1、 java.io.File 类是专门对文件进行操作的类。(只能对文件本身进行操作,不能对文件内容操作)
2、 File类是“文件和目录路径名的抽象表示”。 而不是指文件的内容(IO)。 3、 File类定义了一些与平台无关的方法操作,如:创建、删除文件和重命名等。 4、 Java中目录被看成是一个特殊的文件。List()方法可以返回目录中所有的子目录和文件。 5、 在unix下路径分隔符为(/),而在windos中则是为(),在java中可以正确的处理不同系统中的分隔符。常用构造方法:
1、public File(String pathname)以pathname为路径创建File对象;如果pathname是相对路径,则是相对于Java的系统属性user.dir中的路径。(对eclipse创建的java工程来说,就是该工程的根目录。) 属性: 2、public static final String separator 存储了当前系统的名称分隔符。在 UNIX 和Mac系统上,此字段的值为 ‘/’;在 Windows 系统上,它为 ‘\’。为了程序的跨平台特性,文件的路径应该用这个属性值来代表。 3、public static final char pathSeparator 存储了当前系统默认路径分割符号。Windows系统是 “ ;” 即path环境变量中,不同的路径的分割符号。访问File对象所表示的文件或路径的属性:
public boolean canRead() //是否可读 public boolean canWrite() //是否可写 public boolean exists() //文件是否存在 public boolean isDirectory() //是不是目录/路径 public boolean isFile() //是否是文件 public boolean isHidden() //是否是隐藏的 public long lastModified() //最后修改时间 public long length() //以字节为单位(文件长度) public String getName() //获取文件名称 public String getPath() //创建File对象时,使用什么路径就返回什么路径:是相对就返回相对,是绝对就返回绝对 public String getAbsolutePath() //返回此File对象的绝对路径名 public File getAbsoluteFile() public String getParent()获取父目录例如:
import java.io.File;public class FileTest{ public static void main(String[] args){ File file = new File(args[0]); System.out.println("文件或目录是否存在:" + file.exists()); System.out.println("是文件吗:" + file.isFile()); System.out.println("是目录吗:" + file.isDirectory()); System.out.println("名称:" + file .getName()); System.out.println("路径: " + file.getPath()); System.out.println("绝对路径: " + file.getAbsolutePath()); System.out.println("最后修改时间:" + file.lastModified()); System.out.println(“文件大小:” + file.length()+ “ 字节”); …… }}
对文件的操作:
public boolean createNewFile() //不存在时创建此文件对象所代表的空文件 public boolean delete() //删除文件。如果是目录必须是空才能删除 public boolean mkdir() //创建此抽象路径名指定的目录 public boolean mkdirs() //创建此抽象路径名指定的目录,包括所有必需但不存在的父目录 public boolean renameTo(File dest) //重新命名此抽象路径名表示的文件浏览目录中的文件和子目录 public String[] list() //返回此目录中的文件名和目录名的数组 public File[] listFiles() //返回此目录中的文件和目录的File实例数组 public File[] listFiles(FilenameFilter filter) //返回此目录中满足指定过滤器的文件和目录 java.io.FilenameFilter接口:实现此接口的类实例可用于过滤文件名// level用来记录当前递归的层次public static void listChilds(File f, int level) { // 生成有层次感的空格 StringBuffer sb = new StringBuffer("|--"); for (int i = 0; i < level; i++) { sb.insert(0, "| "); } File[] childs = f.listFiles(); // 递归出口 int length = childs == null ? 0 : childs.length; for (int i = 0; i < length; i++) { System.out.println(sb.toString() + childs[i].getName()); if(childs[i].isDirectory()){ listChilds(childs[i], level + 1); } }}
1、按流向分:
从文件/网络/内存等(数据源)到程序是”读read”的过程,是”输入input”的过程,处理这样的事务的类统称为”输入流”类。 从程序到文件/网络/内存等(数据源)是”写write”的过程,是”输出output”的过程,处理这样的事务的类统称为”输出流”类。 2、按数据处理单位分: 字节流:以字节为单位传输数据的流 8bit = 1byte 处理二进制文件,包括mp3,jpg,exe,doc,ppt,pdf…以Stream结尾的都是字节流. 字符流:以字符为单位传输数据的流 16bit = 2byte=1char 处理文本文件.txt,.java。以Reader结尾的都是输入字符流,以Writer结尾的都是输出字符流。 3、按功能(层次)分: 节点流:用于直接操作目标设备的流(直接跟数据对话的流,基层干部)。 处理流(也叫过滤流):是对一个已存在的流的连接和封装,通过对数据的处理为程序提供更为强大、灵活的读写功能。(跟其他流对话的流,高级干部)。1、InputStream抽象类:继承自InputStream的流都是用于向程序中输入数据的,且数据的单位为字节(8位)。
InputStream的基本方法: public abstract int read() throws IOException {}//从输入流中读取数据的下一个字节, 返回读到的字节值.若遇到流的末尾,返回-1 public int read(byte[] b) throws IOException {}//从输入流中读取 b.length 个字节的数据并存储到缓冲区数组b中.返回的是实际读到的字节总数 public int read(byte[] b, int off, int len) throws IOException {}//读取 len 个字节的数据,并从数组b的off位置开始写入到这个数组中 public void close() throws IOException {}//关闭此输入流并释放与此流关联的所有系统资源 public int available() throws IOException {}//返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数 public long skip(long n) throws IOException {}//跳过和丢弃此输入流中数据的 n 个字节,返回实现路过的字节数。
2、OutputStream抽象类:继承自OutputStream的流是程序用于向外输出数据的,且数据的单位为字节(8位)。
OutputStream的基本方法: public abstract void write(int b) throws IOException {}//将指定的字节写入此输出流。 public void write(byte[] b) throws IOException {}// 将 b.length 个字节从指定的 byte 数组写入此输出流。 public void write(byte[] b, int off, int len) throws IOException {}//将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。 public void flush() throws IOException {}//刷新此输出流并强制写出所有缓冲的输出字节。 pulbic void close() throws IOException {}//关闭此输出流并释放与此流有关的所有系统资源。
3、Reader抽象类:继承自Reader的流都是用于向程序中输入数据的,且数据的单位为字符(16位)。
Reader的基本方法: public int read() throws IOException {}//读取单个字符,返回作为整数读取的字符,如果已到达流的末尾返回-1 public int read(char[] cbuf) throws IOException {}//将字符读入数组,返回读取的字符数 public abstract int read(char[] cbuf, int off, int len) throws IOException {}//读取 len 个字符的数据,并从数组cbuf的off位置开始写入到这个数组中 public abstract void close() throws IOException {}//关闭该流并释放与之关联的所有资源 public long skip(long n) throws IOException {}//跳过n个字符。 public int available() //还可以有多少能读到的字节数
4、Writer抽象类:继承自Writer的流是程序用于向外输出数据的,且数据的单位为字符(16位)。
Writer的基本方法: public void write(int c) throws IOException {} //写入单个字符 public void write(char[] cbuf) throws IOException {} //写入字符数组 public abstract void write(char[] cbuf, int off, int len) throws IOException {} //写入字符数组的某一部分 public void write(String str) throws IOException {} //写入字符串 public void write(String str, int off, int len) throws IOException {}//写字符串的某一部分 public abstract void close() throws IOException {} //关闭此流,但要先刷新它 public abstract void flush() throws IOException {} //刷新该流的缓冲,将缓冲的数据全写到目的地
1、文件流:主要用来操作文件
JDK提供了4种文件流: FileInputStream继承自InputStream, FileOutputStream继承自OutputStream,FileOutputStream(String name, boolean append) , FileReader继承自Reader, FileWriter继承自Writer,还提供了一个FileWriter(String fileName, boolean append) 构造方法来指定是否使用追加模式FileReader的方法: 1、构造方法: FileReader(File file) //在给定从中读取数据的 File 的情况下创建一个新 FileReader。 FileReader(String fileName)// 在给定从中读取数据的文件名的情况下创建一个新 FileReader。 2、方法:int read() //读取单个字符 int read(char[] cbuf) //将字符读入数组 int read(char[] cbuf,int off, int len)//将字符读入数组的某一部分 void close()//关闭该流并释放与之关联的所有资源。FileWriter的方法: 1、构造方法: FileWriter(File file)//根据给定的 File 对象构造一个 FileWriter 对象。 FileWriter(File file,boolean append)//根据给定的 File 对象构造一个 FileWriter 对象,写入的内容追加在上次写入内容后面。 FileWriter(String fileName)//根据给定的文件名构造一个 FileWriter 对象。 FileWriter(String fileName,boolean append)//根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。(追加) 2、方法:void write(int c)//写入单个字符 void write(char[] cbuf,int off,int len)//写入字符数组的一部分 void writer(String str,int off,int len)//写入字符串的某一部分 void flush()//刷新该流的缓冲 void close()//关闭此流,但要先刷新它
2、内存流:内存流主要用来操作内存
主要有ByteArrayInputStream和ByteArrayOutputStream(byte[] toByteArray()),输入和输出可以从文件中来,也可以将设置在内存之上。 ByteArrayInputStream主要完成将内容从内存读入程序之中,而ByteArrayOutputStream的功能主要是将数据写入到内存中。 内存流程操作步骤: 向内存写出:数据———>>>ByteArrayOutputStream———>>>内存1、缓冲流:缓冲流是处理流的一种,建立在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,还增加了一些新的方法。
JDK提供四种缓冲流: BufferedInputStream 可以对任何的InputStream流进行包装。 BufferedOutputStream 可以对任何的OutputStream流进行包装。 BufferedReader 可以对任何的Reader流进行包装,新增了readLine()方法用于一次读取一行字符串(以‘\r’或‘\n’认为一行结束)返回一行 如果没有返回null。 BufferedWriter 可以对任何的Writer流进行包装,新增了newLine()方法用于写入一个行分隔符。 注意:对于缓冲输出流,写出的数据会先缓存在内存缓冲区中,关闭此流前要用flush()方法将缓存区的数据立刻写出。关闭过滤流时,会自动关闭过滤流所包装的所有底层流。2、转换流:在IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换流。转换流用于在字节流和字符流之间转换。
JDK提供了两种转换流: InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。InputStreamReader需要和InputStream“套接”,它可以将字节流中读入的字节解码成字符。 OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变为字节流的输出对象。OutputStreamWriter需要和OutputStream“套接”,它可以将要写入字节流的字符编码成字节。 转换步骤: 写出数据:程序—>>字符数据—>>字符流—>>OutputStreamWriter(OutputStream)—>>字节流—>>文件 读入数据:程序<<—字符数据<<—字符流<<—-InputStreamReader(InputStream)<<—字节流<<—文件3、打印流: PrintStream和PrintWriter都属于输出流,分别针对字节和字符。PrintStream和PrintWriter类都提供了一系列重载的print和println方法来输出各种类型的数据。PrintStream和PrintWriter的输出操作不会抛出异常。System.out就是PrintStream的一个实例。
构造方法: PrintStream(OutputStream out)//创建新的打印流。 PrintStream(OutputStream out, boolean autoFlush)创建新的打印流,自动刷新缓冲 PrintWriter(Writer out)//创建不带自动行刷新的新 PrintWriter。 PrintWriter(Writer out, boolean autoFlush)// 创建带自动刷新的新 PrintWriter。 PrintWriter(OutputStream out)//根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter。 PrintWriter(OutputStream out, boolean autoFlush)//通过现有的 OutputStream 创建新的 PrintWriter,带自动刷新。
4、Object流(对象流):
JDK提供的ObjectOutputStream和ObjectInputStream类是用于存储和读取基本数据类型或对象的过滤流。 用ObjectOutputStream类保存基本数据类型或对象的机制叫序列化.用ObjectInputStream类读取基本数据类型或对象的机制叫反序列化.能被序列化的对象所对应的类必须实现java.io.Serializable这个标识性接口.构造方法:public ObjectOutputStream(OutputStream out) throws IOException{}//创建写入指定 OutputStream 的 ObjectOutputStream。 public ObjectInputStream(InputStream in) throws IOException{}//创建从指定 InputStream 读取的 ObjectInputStream。 transient关键字: transient关键字修饰成员变量时,表示这个成员变量是不需要序列化。static修饰的成员变量也不会被序列化。实现了Serializable接口的类都应该生成一个private static final long serialVersionUID 序列化版本ID作为标识。
1、主要功能:主要功能是完成随机读取功能,可以读取指定位置的内容。
2、构造方法: public RandomAccessFile(File file, String mode)throws FileNotFoundException{}//创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定。3、文件的打开模式:“r” 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
“rw” 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。 4、常用方法: length() //返回此文件的长度。 getFilePointer() //返回此文件中的当前偏移量。 skipBytes(int) //尝试跳过输入的 n 个字节以丢弃跳过的字节。 seek(long) //设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。 read(byte[] b, int off, int len) //将最多 len 个数据字节从此文件读入 byte 数组。 write(byte[] b, int off, int len) //将 len 个字节从指定 byte 数组写入到此文件,并从偏移量 off 处开始。 writeUTF(String) //使用 modified UTF-8 编码以与机器无关的方式将一个字符串写入该文件。 writeBytes(String s) //按字节序列将该字符串写入该文件。 writeChars(String s) //按字符序列将一个字符串写入该文件。 writeBoolean(boolean v) //按单字节值将 boolean 写入该文件。 writeByte(int v) // 按单字节值将 byte 写入该文件。 writeChar(int v) //按双字节值将 char 写入该文件,先写高字节。 writeInt(int v) // 按四个字节将 int 写入该文件,先写高字节。转载地址:http://pzsni.baihongyu.com/