java IO流

文件操作

package com.st.io;

import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStream_ {
    //写入文件时如果文件不存在,则会创建一个文件
    //注意:当new FileOutputStream(File,boolean) 第二个参数设为true为在原文件中append而不是覆盖
    //第一种写入方式:一次写一个字符
    @Test
    public void writeFile(){
        String filePath = "d:\\b.txt";
        File file = new File(filePath);
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(file);
            fileOutputStream.write('W');

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
    //第二种一次写入多个字节
    @Test
    public void writeFile2(){
        String filePath = "d:\\b.txt";
        File file = new File(filePath);
        FileOutputStream fileOutputStream = null;
        try {

            fileOutputStream = new FileOutputStream(file);
            fileOutputStream.write("WST".getBytes());

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    //第二种一次写入多个字节,指定范围
    @Test
    public void writeFile3(){
        String filePath = "d:\\b.txt";
        File file = new File(filePath);
        FileOutputStream fileOutputStream = null;
        try {

            fileOutputStream = new FileOutputStream(file);
            fileOutputStream.write("WST hello".getBytes(),0,2);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}

FileInputStream

package com.st.io;

import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class FileInputSteam_ {

    //第一种读取方式:一次读取一个字节
    @Test
    public void readFile(){
        String filePath="d:\\a.txt";
        File file = new File(filePath);
        FileInputStream fileInputStream = null;
        //用于接收读取出来的数据
        int fileData=0;
        try {
            fileInputStream=new FileInputStream(file);
            while ( (fileData=fileInputStream.read()) !=-1 ){
                System.out.print((char) fileData);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    //第二种读取方式一次读取多个字节
    @Test
    public void readFile2(){
        String filePath = "D:\\a.txt";
        File file = new File(filePath);
        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream(file);
            byte[] aByte = new byte[8];
            int readLen = 0;
            while ((readLen = fileInputStream.read(aByte) )!= -1){
                System.out.print(new String(aByte,0,readLen,"UTF-8"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

FileOutputStream

package com.st.io;

import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStream_ {
    //写入文件时如果文件不存在,则会创建一个文件
    //注意:当new FileOutputStream(File,boolean) 第二个参数设为true为在原文件中append而不是覆盖
    //第一种写入方式:一次写一个字符
    @Test
    public void writeFile(){
        String filePath = "d:\\b.txt";
        File file = new File(filePath);
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(file);
            fileOutputStream.write('W');

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
    //第二种一次写入多个字节
    @Test
    public void writeFile2(){
        String filePath = "d:\\b.txt";
        File file = new File(filePath);
        FileOutputStream fileOutputStream = null;
        try {

            fileOutputStream = new FileOutputStream(file);
            fileOutputStream.write("WST".getBytes());

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    //第二种一次写入多个字节,指定范围
    @Test
    public void writeFile3(){
        String filePath = "d:\\b.txt";
        File file = new File(filePath);
        FileOutputStream fileOutputStream = null;
        try {

            fileOutputStream = new FileOutputStream(file);
            fileOutputStream.write("WST hello".getBytes(),0,2);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}

节点流和处理流的区别

节点流可以从一个特定的数据源读写数据。
处理流也叫包装流是在已存在的流(节点流或者处理流)之上,为程序提供更强大的读写功能。

字节处理流拷贝文件

package com.st.io;

import org.junit.jupiter.api.Test;

import java.io.*;

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

    }
    //字节处理流文件拷贝
    @Test
    public  void copyFile1()  throws Exception{
        String fileReadPath = "d:\\c.txt";
        String fileWritePath = "d:\\d.txt";
        BufferedReader bufferedReader = null;
        BufferedWriter bufferedWriter = null;
        bufferedReader = new BufferedReader(new FileReader(fileReadPath));
        bufferedWriter = new BufferedWriter(new FileWriter(fileWritePath));
        String fileData = "";
        while ((fileData = bufferedReader.readLine()) != null){
            bufferedWriter.write(fileData);
            bufferedWriter.newLine();
        }
        bufferedReader.close();
        bufferedWriter.close();
   }
   //字节流拷贝文件
   @Test
    public void copyFile2(){
        String fileInputPath = "d:\\dog.png";
        String fileOutPath = "d:\\dpg2.png";
       BufferedInputStream bf = null;
       BufferedOutputStream bo =null;
       try {
           bf = new BufferedInputStream(new FileInputStream(fileInputPath));
           bo = new BufferedOutputStream(new FileOutputStream(fileOutPath));
           byte[] data = new byte[1024];
           int dataLen = 0;
           while((dataLen=bf.read(data)) != -1){
               bo.write(data, 0, dataLen);
           }
       } catch (IOException e) {
           e.printStackTrace();
       } finally {
           try {
               if(bf != null){
                    bf.close();
               }
               if(bo != null){
                    bo.close();
               }
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
   }
}

对象处理流(序列化)

package com.st.io;

import org.junit.jupiter.api.Test;

import java.io.*;

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

    }
    //字节处理流文件拷贝
    @Test
    public  void copyFile1()  throws Exception{
        String fileReadPath = "d:\\c.txt";
        String fileWritePath = "d:\\d.txt";
        BufferedReader bufferedReader = null;
        BufferedWriter bufferedWriter = null;
        bufferedReader = new BufferedReader(new FileReader(fileReadPath));
        bufferedWriter = new BufferedWriter(new FileWriter(fileWritePath));
        String fileData = "";
        while ((fileData = bufferedReader.readLine()) != null){
            bufferedWriter.write(fileData);
            bufferedWriter.newLine();
        }
        bufferedReader.close();
        bufferedWriter.close();
   }
   //字节流拷贝文件
   @Test
    public void copyFile2(){
        String fileInputPath = "d:\\dog.png";
        String fileOutPath = "d:\\dpg2.png";
       BufferedInputStream bf = null;
       BufferedOutputStream bo =null;
       try {
           bf = new BufferedInputStream(new FileInputStream(fileInputPath));
           bo = new BufferedOutputStream(new FileOutputStream(fileOutPath));
           byte[] data = new byte[1024];
           int dataLen = 0;
           while((dataLen=bf.read(data)) != -1){
               bo.write(data, 0, dataLen);
           }
       } catch (IOException e) {
           e.printStackTrace();
       } finally {
           try {
               if(bf != null){
                    bf.close();
               }
               if(bo != null){
                    bo.close();
               }
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
   }
}

节点流和处理流注意事项

1)读写顺序要一致
2)要求实现序列化或反序列化对象,需要实现 Serializable
3)序列化的类中建议添加SerialVersionUID,为了提高版本的兼容性
4)序列化对象时,默认将里面所有属性都进行序列化,但除了static或transient修饰的成员5)序列化对象时,要求里面属性的类型也需要实现序列化接口
6)序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也已经默认实现了序列化

转换流

inputStreamReader

package com.st.io;

import org.junit.jupiter.api.Test;

import java.io.*;

//读入字符转换流
public class InputStream_ {
    String filePath = "d:\\e.txt";
    @Test
    public void test1() throws IOException{
        BufferedReader bf = new BufferedReader(new FileReader(filePath));
        String fileData = null;
        while ((fileData=bf.readLine()) != null){
            System.out.println(fileData);
        }
        bf.close();
    }
    @Test
    public void inputStreamReader_() throws IOException {
        //将字节流转换为字符流&&原文件是gbk编码,用默认编码解析会报错
        BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "gbk"));
        String fileData = null;
        while ((fileData=bf.readLine()) != null){
            System.out.println(fileData);
        }
        bf.close();
    }

}

OutputStreamWriter

package com.st.io;

import org.junit.jupiter.api.Test;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

//输出字符转换流 字节流->字符流
//编码设置
public class OutputStreamWriter_ {
    @Test
    public void test() throws IOException {
        String filePath = "d:\\e.txt";
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath,true), "gbk"));
        bw.write("勇敢去飞!");
        bw.newLine();
        bw.write("123456");
        bw.close();
    }
}

打印流

打印流只有输出流,没有输入流。

PrintStream

package com.st.io;

import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.io.PrintStream;

//打印字节流
public class PrintStream_ {
    @Test
    public void printStream() throws IOException {
        PrintStream out = System.out;
        out.println("勇敢去飞");
        String filePath = "d:\\f.txt";
        System.setOut(new PrintStream(filePath));
        System.out.println("勇敢去飞3");

    }

}

PrintWriter

package com.st.io;

import org.junit.jupiter.api.Test;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

//打印字符流
public class PrintWriter_ {
    @Test
    public void test() throws IOException {
        PrintWriter pw = new PrintWriter(System.out);
        pw.write("勇敢去飞");
        String filePath = "d:\\g.txt";
        PrintWriter printWriter = new PrintWriter(new FileWriter(filePath));
        printWriter.write("123456");
        printWriter.close();
    }
}

注意:打印字符输出流一定要有关闭流操作,close方法中包含真正的写操作。

读写Properties文件

package com.st.io;

import org.junit.jupiter.api.Test;

import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

//properties读写
public class Properties_ {
    //properties读入
    @Test
    public void readProperties() throws IOException {
        Properties p = new Properties();
        //加载properties文件
        p.load(new FileInputStream("C:\\Users\\songtao\\Desktop\\ideaWorkspace\\io\\src\\Properties_.properties"));
        //控制台打印properties文件
        p.list(System.out);
        //获取属性
        String user = p.getProperty("user");
        String age = p.getProperty("age");
        System.out.println("user:"+user);
        System.out.println("age:"+age);
    }
    @Test
    public void writeProperties() throws IOException{
        Properties p = new Properties();
        String filePath = "C:\\Users\\songtao\\Desktop\\ideaWorkspace\\io\\src\\Properties_.properties";
        p.setProperty("age", "12");
        p.setProperty("name", "张三");
        p.store(new FileWriter(filePath), null);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值