Java IO

1 File类

public class File extends Object implements Serializable, Comparable<File>

1.1 创建一个文件

public boolean createNewFile()throws IOException

因为路径名的分隔符在不同操作系统不同:

如Windows下“\”,unix下“/”。所以在操作文件是注意分隔符,使用File.separator常量(分隔符)。

1.2 删除一个文件

public boolean delete()

删除前先判断,文件是否存在:

public boolean exists()

1.3 综合创建、删除文件的操作

一般来说,所有操作不会立刻执行,因为java是通过JVM与底层进行交互的,所以所有的操作要经过JVM完成,可能产生延迟。

对于文件后缀,可有可无。

1.4 创建文件夹

public boolean mkdir()

1.5 列出指定目录的全部文件

显示文件名:

public String[] list() //返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录

显示文件路径:

public File[] listFiles() //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件

3.6 判断给定路径是否是目录

public boolean isDirectory() //测试此抽象路径名表示的文件是否是一个目录

3.7 列出指定目录的全部内容

Java IO_第1张图片

应该采用递归的调用形式。

import java.io.File;
import java.io.IOException;
public class FileDemo {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File file = new File(".");
        printFile(file);  
    }
    public static void printFile(File file){
        if(file!=null){
            if(file.isDirectory()){
                File[] f=file.listFiles();
                if(file!=null){
                    for(File i:f){
                        printFile(i);
                    }
                }
            }else{
                System.out.println(file);
            }
        }
    }
}


File类是在java.io包中唯一与文件本身有关的

可以使用File类创建、删除等常见的文件操作

在使用File类指定路径的时候一定要注意操作系统间的差异,尽量使用separator进行分割。


2 RandomAccessFile

public RandomAccessFile(File file, String mode)throws FileNotFoundException

实例化此类时候需要传递File类,告诉程序应该操作的是哪个文件,之后有一个模式,文件的打开模式;常用的:

r:读模式

rw:读写,如果使用此模式,如果文件不存在,则自动创建。

3 字节流与字符流

在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就需要使用输出流完成。

程序中的输入输出都是以流到的形式保存的,流中保存的实际上全都是字节文件。

java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使用的是InputStream。在字符流中输出主要是使用Writer类完成,输入主要是使用Reader类完成。

文件操作的主要流程:

  1. 使用File类打开一个文件

  2. 通过字节流或字符流的子类,指定输出的位置(四个操作类都是抽象类)

  3. 进行读/写操作

  4. 关闭输入/输出(IO属于资源操作)

3.1 字节输出流

字节流主要是操作byte类型的数据,以byte数组为准,主要操作类就是OutputStream、InputStream

输出流OutputStream:是整个IO包里字节输出流的最大父类,此类的定义:

public abstract class OutputStream extends  Object implements  Closeable,  Flushable

如果要想使用此类,则必须首先通过子类实例化对象,如果现在要操作的是一个文件,则可以使用:FileOutputStream类。通过向上转型之后,可以为OutputStream实例化。

public class FileOutputStream extends OutputStream

在文件本来不存在时,会自动创建一个文件。默认覆盖。

追加的话用另一个构造方法:

public FileOutputStream(File file,boolean append) throws FileNotFoundException

将append值设置为true这表示在文件后面追加。直接添加,没有换行。想要换行则在追加内容前加"\r\n"

3.2 字节输出流

public abstract class InputStream extends  Object implements  Closeable
public class FileInputStream extends InputStream

想知道文件大小,File类的方法:

public long length()

定义byte数组

byte[] b = new byte[(int)file.length()]

读取:

public int read(byte[] b) throws IOException

返回的int实际为读取byte[]的长度。可用String(b)建立字符串可标准输出。

public int read()throws IOException //逐个读

以上两个方法只适合知道输入流大小的情况。

不知文件大小时,可用while((temp=input.read())!=-1)判断


3.4 字节流和字符流的转换

一般在操作输入输出内容时需要使用字节流或字符流,但是有些时候需要将字符流变为字节流的形式,或者将字节流变为字符流的形式,所以需要转换流。

java.lang.Object
  java.io.Writer
      java.io.OutputStreamWriter
java.lang.Object
  java.io.Reader
      java.io.InputStreamReader

OutoutStreamWriter:将输出的字符流变为字节流,即:将一个字符流的输出对象变为字节流的输出对象

InputStreamReader:将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。

Java IO_第2张图片

因为OutputStreamWriter中接受的类型时OutputStream,只要是字节输出流都可以使用字符的形式操作,而InputStreamReader中接受的类型时InputStream,只要是字节的输入流都可以使用字符的输入流操作。

java.lang.Object
  java.io.Writer
      java.io.OutputStreamWriter
          java.io.FileWriter
java.lang.Object
  java.io.Reader
      java.io.InputStreamReader
          java.io.FileReader

不管如何,虽然以字符的输出流形式操作了字节流的输出流,但实际上还是以字节的形似输出,而字符的输入流,虽然是以字符的形似操作,但实际上还是使用的字节流,也就是说,传输或者是从文件中读取数据的时候,文件里真正保存的数据永远是字节。

你可能感兴趣的:(Java IO)