Java第七章(IO)

IO

File类

File类是java.io包的一个重要的类;

File类的对象可以是目录也可以是文件;

File类可以对目录或文件进行操作但不能对具体数据操作;

public class fileDemo1 {
    public static void main(String[] args) {
        /*
        File类:一个File类的对象可以表示一个具体的文件或目录
         */
//        File f1=new File("D:/JavaioDemo");
//        System.out.println(f1.canRead());//文件是否只读
//        System.out.println(f1.exists());//文件是否存在
//        System.out.println(f1.canWrite());//文件能否写
//        System.out.println(f1.isFile());//是否是目录或者文件
//
/*        File file=new File("D:/FileDemo");
        //System.out.prile.mkdirs());创建多级文件夹
        file.delete();//删除一个文件夹时,文件夹中必须是空的
        File[]files=file.listFiles();
        //System.out.println(files);
        for(File f:files){
            if(f.isFile()){
                f.delete();
            }else{
                f.listFiles();
            }
        }*/

    }
}

输入和输出的概念

输入:往程序中输入;

输出:从程序往外写出;

输入流和输出流

按流向分;

输入流:InPutStream、Reader、ObjectInPutStream

输出流:OutPutStream、Writter、ObjectOutPutStream

字节流和字符流

按单位分;

字节流(byte):FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream

字符流:FileReader、FileWriter、BufferedReader、BufferedWriter

输入输出节点字节流

public class FileDemo2 {

    public static void main(String[] args) throws IOException {
/*
        FileInputStream inputStream=new FileInputStream("D:/demo1.txt");
        FileOutputStream outputStream=new FileOutputStream("D:/demo2.txt");

        int b=0;
        while((b=inputStream.read())!=-1){
            outputStream.write(b);
        }
        inputStream.close();//
        outputStream.close();
*/




        FileInputStream inputStream=new FileInputStream("D:/demo1.txt");
        FileOutputStream outputStream=new FileOutputStream("D:/demo2.txt");
        byte[] bytes=new byte[10];
        int size=0;
        while((size=inputStream.read(bytes))!=-1){
            outputStream.write(bytes,0,size);
        }
        inputStream.close();
        outputStream.close();


    }
}

节点流和处理流

public class SteamDemo2 {

    public static void main(String[] args) throws IOException {
         // FileInputStream 直接封装数据,称为节点流(最基础去读数据的流)
        FileInputStream inputStream=new FileInputStream("D:/demo1.txt");
        //BufferedInputStream 封装的是一个节点流对象,可以直接提供缓冲功能,称为处理流/包装流 缓冲字节输入流 默认缓冲区大小是8192个字节,可以自定义缓冲区大小
        BufferedInputStream bufferedInputStream=new BufferedInputStream(inputStream,20);
        FileOutputStream outputStream=new FileOutputStream("D:/demo2.txt");
        BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(outputStream,20);

        byte[]bytes=new byte[10];
        int size=0;
        while((size=bufferedInputStream.read(bytes))!=-1){
            bufferedOutputStream.write(bytes,0,size);
        }
        bufferedInputStream.close();
        bufferedOutputStream.close();

    }
}

输入输出节点字符流

public class SteamDemo3 {

    public static void main(String[] args) throws IOException {

        Scanner scanner=new Scanner(System.in);
        String message= scanner.next();
        //数据输出字节流(包装流/处理流)

        FileOutputStream fileOutputStream=new FileOutputStream("D:/message.txt");
        //fileOutputStream.write(message.getBytes()); 需要自己将字符串转为byte数组输出,比较麻烦
        DataOutputStream dataOutputStream=new DataOutputStream(fileOutputStream);
        dataOutputStream.writeUTF(message);//直接可以将字符串写出(内部进行转换)
        dataOutputStream.flush();
        dataOutputStream.close();

        FileInputStream fileInputStream = new FileInputStream("D:/message1.txt");
        DataInputStream dataInputStream=new DataInputStream(fileInputStream);
        String s=dataInputStream.readUTF();
        System.out.println(s);

    }
}

对象输入输出流

public class OBjectStream {
    /*
        对象输入流:把java中的对象输出在文件中, 从文件把对象输入到程序中
        为什么要把对象输出到文件中?
            new Strudent("张三 ,28");数据存储在对象中,对象是在内存中存储,一但程序运行结束,对象就会销毁
            有时需要对象长久保存,就需要对象输出到文件中,长久保存,举例系统升级,关闭服务器时将对象保存起来,升级完毕,重新把数据还回来
            把对象输出到文件的过程也称为对象的序列化
            再把对象从文件输入到程序的过程称为对象的反序列化,反序列化时会生成一个新的对象,所以反序列化也是创建对象的一种方式
     */
    public static void main(String[] args) throws IOException, ClassNotFoundException {

/*        String s = new String("abc");
        Date date = new Date();
        //对象输出 对象的序列化
        FileOutputStream fileOutputStream=new FileOutputStream("D:/temp.txt");
        ObjectOutput output=new ObjectOutputStream(fileOutputStream);
        output.writeObject(s);
        output.writeObject(date);
        output.flush();
        output.close();*/
        //对象德输入  反序列化
        FileInputStream inputStream = new FileInputStream("D:/temp.txt");
        ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
        String s = (String) objectInputStream.readObject();
        Date date=(Date)objectInputStream.readObject();
        System.out.println(s);
        System.out.println(date);
        objectInputStream.close();
    }

}

字符流

public class Chardemo1 {
    public static void main(String[] args) throws IOException {
        /*
            字符流只能读文本文件,会将独到的字节结合编码表转换为一个字符编码
         */
        FileReader reader=new FileReader("D:/temp.txt");
        FileWriter writer=new FileWriter("D:/demo1.txt");
        char[]chars=new char[2];
        int size=0;
        while((size= reader.read(chars))!=-1){
            System.out.println(size);
            writer.write(chars,0,size);
        }
        reader.close();
        writer.close();
    }
}
public class Chardemo2 {
    public static void main(String[] args) throws IOException {
        FileReader reader=new FileReader("D:/demo1.txt");
        FileWriter writer=new FileWriter("D:/temp.txt",true);
        //保留原来的内容,在原内容上向后追加
        BufferedReader bufferedReader=new BufferedReader(reader);
        BufferedWriter bufferedWriter=new BufferedWriter(writer);
                String line=null;
                while((line= bufferedReader.readLine())!=null){
                    bufferedWriter.write(line);
                    System.out.println(line);
                    bufferedWriter.newLine();//换行符
                }
                bufferedReader.close();
                bufferedWriter.flush();
                bufferedWriter.close();
    }
}

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值