Java-IO (Input Output)

IO流用来处理设备之间的数据传输。

Java.io 包:包含了所有操作输入、输出需要的类。

按照操作数据的不同,可以分为字节流和字符流,按照数据传输方向的不同可以分为输入流和输出流,

程序从输入流中读取数据,向输出流中写入数据。

字节流的输入输出流分别为:InputStream 和 OutputStream

字符流的输入输出流分别为:Reader 和 Writer

字节流:字节流可以操作任何数据 字符流:字符流只能操作纯字符数据

img

图片来自:http://www.runoob.com/java/java-files-io.html

1.File

文件和目录路径名的抽象表现形式。

常用方法:

方法名描述
exists()测试文件或目录是否存在
createNewFile()创建指定文件放回true,若存在则不创建返回false
mkdir()创建文件夹,若存在则不创建
mkdirs()创建文件夹,如果父文件夹不存在,则创建(创建多级目录)
delete()删除文件或文件夹,当删除文件夹时,若文件夹中有内容,则不能删除
renameTo(File dest)把文件重命名为指定文件路径,(用于重命名文件或移动文件)
isDirectory()判断是否是目录
isFile()判断你是否是文件
getAbsolutePath()获取绝对路径
getPath()获取相对路径
getName()获取名称
length()返回文件的长度,字节数,如果是文件夹则返回0
list()返回指定目录下所有文件或文件夹名称的字符串数组
listFiles()返回指定目录小所有文件或者文件夹的File数组
lastModified()获取最后一次的修改时间,单位毫秒

2.FileInputStream

用来从文件中读取数据

            FileInputStream fos=new FileInputStream("test.txt");
             //InputStreamReader 转换流 ,用于字节流转换为字符流
            BufferedReader br=new BufferedReader(new InputStreamReader(fos));
            String line; //一行行的读取数据
            while((line=br.readLine())!=null) {
                System.out.println(line);
            }
            br.close();// 关闭数据流
            fos.close();

3.FileOutputStream

用来向文件中写入数据

            FileOutputStream fos=new FileOutputStream("test1.txt",true);
            String string="test1";
            fos.write(string.getBytes());
            fos.close();

4.文件拷贝

        FileInputStream fis=new FileInputStream("image.jpg");
        FileOutputStream fos=new FileOutputStream("imagecopy.jpg");
        int len=0;  //读取到有效字节个数 ,当没有数据时放回-1
        byte[] buffer=new byte[1024*8];//定义缓冲区大小
        while((len=fis.read(buffer))!=-1) { 
            fos.write(buffer,0,buffer.length);
        }
        //关闭数据流
        fis.close();
        fos.close();

5.Java 1.7新特性 自动关闭资源的try语句

语法:

try (  /* 需要自动关闭的资源*/   ){
            
        }

示例:

 //文件拷贝
try (InputStream fis = new FileInputStream(source);
        OutputStream fos = new FileOutputStream(target)){
 
        byte[] buf = new byte[8192];
        int i;
        while ((i = fis.read(buf)) != -1) {
            fos.write(buf, 0, i);
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }

注意:被关闭的对象需要实现 java.lang.AutoCloseable 接口

6. 对象序列化 ObjectOutputStream和ObjectInputStream

对象需要实现 Serializable 接口

public class Person implements Serializable {

    public Person(int id, String name) {
        Id = id;
        Name = name;
    }

    public int Id;
    public String Name;
}
   public static void writeObject(List<Person> list){

        try (ObjectOutputStream objectOutputStream =new ObjectOutputStream(new FileOutputStream("data.dat"))){
            objectOutputStream.writeObject(list);

        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(" Successfully.");
    }

    public  static List<Person> readObject(){

        try (ObjectInputStream objectInputStream=new ObjectInputStream(new FileInputStream("data.dat"))){
            return  (List<Person>)objectInputStream.readObject();

        } catch (Exception e) {
            e.printStackTrace();
        }
          return null;
    }

7. InputStreamReader 和OutputStreamWriter

他们起到作用是连接字节流和字符流。

Last modification:July 12th, 2020 at 07:20 pm