IO流

廉价感情. 提交于 2020-01-29 05:47:40

I/O相关     输入/输出  流(数据流动)
数据流动的方向 读数据(输入Input) 写数据(输出output)
文件流 字符流 对象流 网络流…

File(文件)

一种电脑的存储形式
文件有不同的格式 .txt .doc .ppt .mp4 .jpg .rar …
文件夹?----目录路径
File----->与电脑上的文件或文件夹产生一一对应的映射关系
File是一个类

  1. java.io包中
  2. 文件或目录路径名的抽象表示形式
  3. File与真实硬盘中的文件或文件夹 不是一个东西
      File是在内存中的一个对象<—映射—>硬盘上的文件或文件夹
  4. File类中的常用的方法
      canRead()
      canWrite()
      isHidden()
      isFile()
      isDirectory()
      length()    获取文件中字节的个数
      lastModified() 获取文件最后的修改时间—>毫秒值
      *String path = getAbsolutePath() 获取文件的绝对路径 D://test//Test.txt
       绝对路径<---->相对路径
       绝对路径可以通过完整的字符串 定位盘符 文件夹 文件
       相对路径没有盘符的写法    当前工程(项目)所在的位置找寻
         C:\Users\Administrator\IdeaProjects\TestFile
      String name = getName()   获取文件的名字 Test.txt
      *boolean = createNewFile()   创建新的文件
      *boolean = mkdir     创建新的文件夹 外层没有 不能创建
      *boolean = mkdirs     创建新的文件夹 外层没有 可以自动创建
      String pname = getParent()   获取当前file的父亲file名字
      *File file = getParentFile()  获取当前file的父亲file对象
      String[] names = list()    获取当前file的所有儿子名字
      *File[] files = listFiles()   获取当前file的所有儿子对象
      *boolean = delete() 删除文件或空的文件夹 不能删除带元素的文件夹
      文件的遍历和删除

文件流

流按照方向(功能)来区分
 in读取文件中的内容    out(写入)向文件中写内容
 文件输入流       文件输出流
 字节型文件输入流    字节型文件输出流
 字符型文件输入流    字符型文件输出流

文件流示意图
文件流示意图

操作的目标来区分
 文件流 数组流 字符串流 数据流 对象流 网络流。。。。

字节型文件流(1字节)

FileInputStream/FileOutputStream

字节型文件输入流 FileInputStream

  1. 包 java.io
  2. 了解一下继承关系 InputStream类 字节型输入流的父类
  3. 创建对象
      调用一个带File类型的构造方法
      调用一个带String类型的构造方法
  4. 常用方法
      int code = read(); 每次从流管道中读取一个字节  返回字节的code码
      *int count = read(byte[] )  每次从流管道中读取若干个字节 存入数组内 返回有效元素个数
      int count = available(); 返回流管道中还有多少缓存的字节数
      skip(long n) 跳过几个字节 读取
       多线程—>利用几个线程同时读取文件
       10000字节  5个小人同时读取
       1-2000 2001-4000 4001-6000 6001-8000 8001-10000
       D当做服务器 E当做客户端
       *close() 将流管道关闭—必须要做 最好放在finally里 注意代码的健壮性 判断严谨

字节型文件输出流 FileOutputStream

FileOutputStream 将数据写入文件中

  1. java.io
  2. 继承OutputStream 所有字节型输出流的父类
  3. 创建对象
      调用一个带File参数   还有File boolean重载
      调用一个带String参数  还有String boolean重载
      带boolen的值为true表示追加的意思
  4. 常用方法
      write(int code);  将给定code对应的字符写入文件 ‘=’
      write(byte[])   将数组中的全部字节写入文件 getByte()
      flush();     将管道内的字节推入(刷新)文件
      close();     注意在finally中关闭

字符型文件流(2字节–1字符)

FileReader    FileWriter
只能操作纯文本文件(文件右键打开方式 记事本打开 能看懂)

FileReader 输入流

  1. java.io包
  2. 继承 InputStreamReader Reader
  3. 构造方法
  4. 常用
      read()
      read(char[])

FileWriter 输出流

  1. java.io包
  2. 继承 OutputStreamWriter Writer
  3. 构造方法
      带file参数  带file,boolean参数
      带String参数 带String,boolean参数
      带boolen的值为true表示追加的意思
  4. 常用
    write(int)
    write(char[])
    write(string)
    flush close

缓冲流

在流管道内增加缓存的数据
让我们使用流读取的文字更加的流畅
高级流—>创建通过低级流
  BufferedInputStream/BufferedOutputStream
  BufferedReader/BufferedWriter
缓冲流示意图
缓冲流示意图

BufferedInputStream

构建方式 使用低级流构建
基本使用与低级流的方法完全一致
read()
skip()
available()
close()

BufferedOutputStream

构建方式 使用低级流构建 注意 缓冲流构建的时候没有boolean类型的参数
基本使用与低级流的方法完全一致
write()
flush()
close()

import java.io.*;

public class TestBufferedStream {

    public static void main(String[] args){
        try {
            //创建一个流  string  file
            File file = new File("D://test//Test.txt");
            FileInputStream fis = new FileInputStream(file);
            BufferedInputStream bis = new BufferedInputStream(fis);
            bis.read(int);
            bis.read(byte[])
            bis.available();
            bis.skip(long);
            bis.close();

            FileOutputStream fos = new FileOutputStream("",true);
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            bos.write(int);
            bos.write(byte[]);
            bos.flush();
            bos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

BufferedReader

String value = readLine();

BufferedWriter

write(String)
newLine()

import java.io.*;

public class TestBufferedReaderAndWriter {

    //设计一个方法  用来用户登录认证
    public String login(String username,String password){
        //真实的名字和密码 永久的存在数据库---->数据持久化
        //文件我们采用.txt形式的纯文本   文本中的内容  以行为单位  每一行记录一个人的信息
        try {
            BufferedReader br = new BufferedReader(new FileReader("D://test//User.txt"));
            String user = br.readLine();//user表示一行记录  记录着账号和密码 郑中拓-123
            while(user!=null){
                System.out.println("找到信息了么");
                //将user的信息 按照-拆分  分别与方法的参数进行比较
                String[] value = user.split("-");//value[0]账号  value[1]密码
                System.out.println(value.length);
                System.out.println(value[0]+"---"+username);
                if(value[0].equals(username)){
                    System.out.println("名字对啦");
                    if(value[1].equals(password)){
                        return "登录成功";
                    }
                }
                user = br.readLine();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "用户名或密码错误";
    }

    public static void main(String[] args){
/*        try {
            BufferedWriter bw = new BufferedWriter(new FileWriter("D://test//User.txt",true));
            bw.newLine();
            bw.write("Java-888");
            bw.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }*/


/*        TestBufferedReaderAndWriter test = new TestBufferedReaderAndWriter();
        String result = test.login("渡一教育","666");
        System.out.println(result);

        try {
            //创建一个字符形式的缓冲流  输入流  读取文件
            FileReader fr  = new FileReader("D://test//User.txt");
            BufferedReader br = new BufferedReader(fr);
            String value = br.readLine();//读取文件中一行的信息   read  int
            while(value!=null){
                System.out.println(value);
                value = br.readLine();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }*/





        try {
            //创建字符输入流  file  String
            File file = new File("D://test//Test.txt");
            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);
            int code = br.read();
            System.out.println(code);//65279
            while(code!=-1) {
                System.out.print((char)code);
                code = br.read();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

对象流

import java.io.*;

public class TestObjectStream {

    public static void main(String[] args){
//        try {
//            //将对象直接记录在文件中
//            //对象的序列化
//            Person p1 = new Person("郑中拓",18);
//            //对象输出流
//            FileOutputStream fos = new FileOutputStream("D://test//Person.txt");
//            ObjectOutputStream oos = new ObjectOutputStream(fos);//高级流
//            oos.writeObject(p1);//将对象拆分成字节碎片  序列化到文件里
//            oos.flush();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }

        //需要一个对象输入流
        try {
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D://test//Person.txt"));
            Person p = (Person)ois.readObject();
            System.out.println(p);
            p.eat();//EOFException说明没有对象  通常会将所有记录的对象存在一个集合
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}
import java.io.Serializable;

public class Person implements Serializable {

    private long serialVersionUID = -440948515215806088L;
    private String name;
    private int age;

    public Person(){}
    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }

    public String toString(){
        return "{"+this.name+","+this.age+"}";
    }
    public String getName(){
        return this.name;
    }
    public int getAge(){
        return this.age;
    }
    public void eat(){
        System.out.println(this.name+"的吃饭方法");
    }
}

对比

		File
		InputStream	OutputStream
		Reader		Writer

*文件流
	低级
		字节型	FileInputStream  FileOutputStream
		字符型	FileReader  FileWriter	字符集65279
	*缓冲
		字节型	BufferedInputStream  BufferedOutputStream
		字符型	BufferedReader	BufferedWriter
数组流
	byte数组		ByteArrayInputStream	ByteArrayOutputStream
	char数组		CharArrayReader		CharArrayWriter
数据流			DataInputStream		DataOutputStream
字符串流			StringReader		StringWriter
*对象流			ObjectInputStream		ObjectOutputStream
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!