IO流的总结

概述:

1.File 文件操作
2.IO流

  • IO:input和output
  • System.in
  • System.out

3.文件流
4.处理流:

  • 带有缓冲区的流
  • 转换流
  • 对象流

文件操作File类

file类:表示操作系统中的文件或文件夹
文件路径:
1.绝对路径
从磁盘根目录
C:/abc/def/a.txt
2.相对路径
相对于当前的项目
文件夹/文件

package IO.File;

import java.io.File;

public class Test {
    public static void main(String[] args) {

        try {
            //File file = new File("abc/def/吼吼吼.txt");
//            file.createNewFile();//创建一个文件,不包含文件夹

//            System.out.println(file.getParentFile());//拿到上一层文件夹的对象
//            System.out.println(file.getParent());//拿到上一层文件名
//
//            file.mkdir();//不能创建多级目录
//            file.mkdirs();//创建文件夹一定选这个,可以帮我们把上级目录创建出来
//
//            file.renameTo(new File("abc/def/吼吼吼.txt"));//重命名
//            file.delete();//删除文件



            //查看相关
//            System.out.println(file.exists());//查看文件是否存在
//
//            System.out.println(file.isAbsolute());//判断是否是绝对路径
//
//            System.out.println(file.isDirectory());//判断文件是否是文件夹
//
//            System.out.println(file.isFile());//判断文件是否是文件
//
//            System.out.println(file.length());//查看文件大小
//
//            System.out.println(file.getName());//查看文件的名字

			//完整的创建文件
            File file = new File("abc/def/吃饭.txt");
            //1.先判断上层文件夹是否存在
            File parentFile = file.getParentFile();
            if (!parentFile.exists()){
                parentFile.mkdirs();//创建上层文件夹
            }
            //2.创建文件
            file.createNewFile();


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

IO流——节点流

在这里插入图片描述

流的分类:
1.按照读写的方向来讲,分为输入流与输出流。站在程序的角度去分析。
2.按照读写内容的单位来讲,分为字节流和字符流
3.按照流的功能l不同,分为节点流和处理流
节点流:直接连接在文件上的
处理流:套在其他流上的

lnputStream
OutputStream
Reader
Writer
抽象类

文件流:
FileInputStream 文件字节输入流= =读
FileOutputStream 文件字节输出流= =写
FileReader文件字符输入流
FileWriter文件字符输出流

如何选择流:
字符流:读取文件中的文字信息
字节流:读取非文本文件的时候

package IO.Node;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class TestFileInputStream {
    public static void main(String[] args) throws Exception {

        //创建流
        FileInputStream fis = new FileInputStream(new File("a.txt"));
//        int b = fis.read();
//        System.out.println((char) b);
//
//        int b1 = fis.read();
//        System.out.println((char) b1);
//        byte [] bs = new byte[1024];
//        int len = fis.read(bs);//返回读取了多少个字节
//
//        System.out.println(new String(bs,0,len));

        //读取文件最重要的一套写法
        byte[] bytes = new byte[1024];
        int len = 0;
        while ((len=fis.read(bytes))!=-1){
            String s = new String(bytes,0,len);
            System.out.println(s);
        }
        fis.close();
    }
}

package IO.Node;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class TestFileOutputStream {
    public static void main(String[] args) throws Exception {
        FileOutputStream fos = new FileOutputStream(new File("a.txt"),true);
        fos.write("谁都很帅".getBytes());

        //好习惯
        fos.flush();//清空
        fos.close();//关闭

    }
}

package IO.Node;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;

public class TestFileReader {
    public static void main(String[] args) throws Exception {
        FileReader fr = new FileReader(new File("a.txt"));
//       int i =  fr.read();//以字符为单位
//        System.out.println((char)i);
//
//
//        char[] cs = new char[1024];
//        int len = fr.read(cs);
//        System.out.println(new String(cs,0,len));

        char[] cs = new char[1024];
        int len = 0;
        while ((len = fr.read(cs))!= -1){
            System.out.println(new String(cs,0,len));
        }
        fr.close();


    }
}

package IO.Node;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class TestFileWriter {
    public static void main(String[] args) throws Exception {
        FileWriter fw = new FileWriter(new File("a.txt"));
        fw.write("我能写字符串了,好腻害");

        fw.flush();
        fw.close();
    }
}

IO流小练习

使用IO流,把一张图片从C盘复制到D盘(附加思考:如果是剪切呢?)
字节流。

package IO.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class test {

    public static void main(String[] args) throws Exception {
        File f = new File("abcd/download.jpg");
        FileInputStream fis = new FileInputStream(f);

        FileOutputStream fos = new FileOutputStream(new File("D:\\WWWsd.jpg"));
        byte[] bs = new byte[1024];

        int len = 0;
        while ((len = fis.read(bs))!=-1){//读取数据
            fos.write(bs,0,len);//写出数据
        }
        fis.close();
        fos.flush();
        fos.close();
        
        f.delete();//剪切,相当于删除
    }
}

缓冲流

IO流
1.输入流,输出流
2.字节流,字符流
3.节点流,处理流

处理流:
1.缓冲流
2.转换流
3.对象流

缓冲流:带有缓冲区的数据流
处理流必须接到节点流上

BufferedlnputStream
BufferedOutputStream
BufferedReader-----------》重点,读取文本文件最好的一种方式
BufferedWriter

package IO.Bufferd;

import java.io.*;

public class Test {
    public static void main(String[] args) throws Exception {
        //BufferedInputStream bis = new BufferedInputStream(new BufferedInputStream(new FileInputStream(new File("a.txt"))));
        BufferedReader br = new BufferedReader(new FileReader(new File("a.txt")));
//        System.out.println(br.readLine());//是读取文本文件最好用的方法
//        System.out.println(br.readLine());
        String str = "";
        while ((str = br.readLine())!= null){
            System.out.println(str);
        }
        br.close();
    }
}

转换流

字节流—》字符流
InputStreamReader
OutputStreamWriter

Scanner sc = new Scanner(Systemm.in)

package IO.Convert;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {
    public static void main(String[] args) throws Exception {
        //把字节流转换为字符流
        BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
        String s = br.readLine();
        System.out.println("从System.in接收到的是:"+s);
    }
}

package IO.Convert;

        import java.io.IOException;
        import java.io.OutputStream;
        import java.io.OutputStreamWriter;
        import java.io.Writer;

public class Test2 {
    public static void main(String[] args) throws Exception {
        Writer writer = new OutputStreamWriter(System.out);
        writer.write("你好,我叫周润发");
        writer.flush();
        writer.close();//有时候,这个流不可以关
        System.out.println("ss" );

    }
}

对象流

ObjectInputStream
ObjectOutputStream
(Exception in thread “main” java.io.NotSerializableException: IO.obj.Person//没有序列化
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at IO.obj.Test.main(Test.java:12))==》发现这个异常添加实现就行

序列化:把一个对象转化成字节的过程
反序列化:把字节转化成对象
在java中只需要给类添加一个实现,Serialiable,你就是可以被序列化的一个类了

文件修改操作

把文件“唐诗三百首.txt"文件中的所有的李白替换成李太白

package IO.Update;

import java.io.*;

public class Test {
    public static void main(String[] args) throws Exception {
        File res = new File("唐诗三百首.txt");
        File another = new File("副本唐诗三百首.txt");
        BufferedReader br = new BufferedReader(new FileReader(res));

        BufferedWriter bw = new BufferedWriter(new FileWriter(another));

        String line = "";
        while ((line = br.readLine())!= null){
            line = line.replace("李白","李太白");//替换文件内容
            bw.write(line);//写入新文件
            bw.newLine();//另起一行
        }
        br.close();
        bw.flush();
        bw.close();

        //删除原文件
        res.delete();//删除文件
        another.renameTo(res);//重命名文件
    }
}

作业:

package IO.Update;

import com.sun.org.apache.bcel.internal.generic.F2D;

import java.io.*;
import java.text.DecimalFormat;

public class HomeWork {
    public static void main(String[] args) throws Exception {
        DecimalFormat df = new DecimalFormat(".00");
        //1.能从文件中读取水果信息
        
        //1.1需要创建输入流,BufferedReader
        //1.2第一行要特殊处理,第一行是表头
        File f1 = new File("fruit.txt");
        BufferedReader br = new BufferedReader(new FileReader(f1));

        File f2 = new File("副本_fruit.txt");
        BufferedWriter bw = new BufferedWriter(new FileWriter(f2));

        String title = br.readLine();//第一行内容
        //写出第一行内容
        bw.write(title+"_总价");
        bw.newLine();

        //2.计算水果的总价格
        //2.1读取所有水果的信息
        String content = "";
        while((content = br.readLine())!=null){//香蕉,3.33,20
            String[] fs = content.split("_");

            double price = Double.parseDouble(fs[1]);
            double num = Double.parseDouble(fs[2]);
            double totle = price*num;//66.6
            String totleStr = df.format(totle);//“66.60”
            System.out.println(totleStr);
            content+="_"+totleStr;//拼接 香蕉_3.33_20_66.60
            bw.write(content);//向新文件写入内容
            bw.newLine();
        }
        br.close();
        bw.flush();
        bw.close();

        //3.删除源文件,重新命名新文件
        f1.delete();
        f2.renameTo(f1);


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值