Java I/O

IO流就是输入输出流,在Java中用File对文件和目录进行抽象,用输入流和输出流对数据的读取和写入进行抽象。 

File

InputStream
 FileInputStream
 ObjectInputStream
 ByteArrayInputStream
 BufferedInputStream
OutputStream
 FileOutputStream
 ObjectOutputStream
 ByteArrayOutputStream
 BufferedOutputStream

Reader
 FileReader
 BufferedReader   
Writer
 FileWriter
 BufferedWriter

Properties

File

File是对文件和目录的抽象。

String fileStr = "/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/logback.xml";
File file = new File(fileStr);
//获取文件名称
System.out.println(file.getName());
//获取文件的绝对路径
System.out.println(file.getAbsolutePath());
//获取文件所在目录
System.out.println(file.getParent());
//获取文件长度
System.out.println(file.length());
//判断文件是否存在
System.out.println(file.exists());
//判断是否是文件
System.out.println(file.isFile());
//判断是否是目录
System.out.println(file.isDirectory());

//如果文件/目录不存在,创建文件或目录
if (!file.exists()) {
    file.createNewFile();
    file.mkdir();
}

I/O流

I/O流是对数据读写的抽象,输入流对应数据的读取,输出流对应数据的写入,另外从操作数据的角度还可以把I/O流分为字节流和字符流,其中字符流用于操作字符数据,虽然字节流也能够完成对字符数据的操作,但在api上没有字符流使用起来方便。

字节流

FileInput/OutputStream

主要用来操作文件。

String fileStr = "/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/logback.xml";
String fileStr1 = "/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/logback1.xml";
FileInputStream fileInputStream = new FileInputStream(new File(fileStr));
FileOutputStream fileOutputStream = new FileOutputStream(new File(fileStr1));

byte[] bs = new byte[1024];
int len = -1;
while ((len = fileInputStream.read(bs)) != -1) {
    fileOutputStream.write(bs);
}
fileInputStream.close();
fileOutputStream.close();
//文件拷贝
public static void main(String[] args) throws Exception {

    FileInputStream fileInputStream = null;// new FileInputStream(new File("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/girl.jpeg"));
    FileOutputStream fileOutputStream = null;
    try {
        fileInputStream = new FileInputStream(new File("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/girl.jpeg"));
        fileOutputStream = new FileOutputStream(new File("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/girl1.jpeg"));

        byte[] bs = new byte[1024];
        int len = -1;
        while ((len = fileInputStream.read(bs)) != -1) {
            fileOutputStream.write(bs, 0, len);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        if (fileInputStream != null) {
            fileInputStream.close();
        }
        if (fileOutputStream != null) {
            fileOutputStream.close();
        }
    }
}

ObjectInput/OutputStream

主要用来做对象的序列化和反序列化,static和transition变量不会被序列化。

public class ObjectStreamTest {

    public static void main(String[] args) throws Exception {
        ObjectStreamTest.out();
        ObjectStreamTest.in();
    }

    public static void out() throws Exception {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/person.obj"));
        Person person = new Person("zhangsan", 10);
        oos.writeObject(person);
        oos.flush();
        oos.close();
    }

    public static void in() throws Exception {
        ObjectInputStream ooi = new ObjectInputStream(new FileInputStream("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/person.obj"));
        Person person = (Person)ooi.readObject();
        ooi.close();
        System.out.println(person);
    }

    public static class Person implements Serializable {
        private String name;
        private int age;
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
}

ByteArrayInput/OutputStream

略。

BufferedInput/OutputStream

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

    BufferedInputStream inputStream = null;
    BufferedOutputStream outputStream = null;

    try {
        inputStream = new BufferedInputStream(new FileInputStream("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/girl.jpeg"));
        outputStream = new BufferedOutputStream(new FileOutputStream("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/girl2.jpeg"));
        int len = -1;
        byte[] bs = new byte[1024];
        while ((len = inputStream.read(bs)) != -1) {
            outputStream.write(bs, 0, len);
        }
        outputStream.flush();
    }catch (Exception ex) {
        ex.printStackTrace();
    }finally {
        if (inputStream != null) {
            inputStream.close();
        }
        if (outputStream != null) {
            outputStream.close();
        }
    }
}

字符流

FileReader/FileWriter

处理字符。

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

    FileReader fileReader = null;
    FileWriter fileWriter = null;
    try {
        fileReader = new FileReader(new File("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/傲慢与偏见.txt"));
        fileWriter = new FileWriter(new File("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/傲慢与偏见1.txt"));
        int len = -1;
        char[] chars = new char[1024];
        while ((len = fileReader.read(chars)) != -1) {
            //System.out.println(new String(chars));
            fileWriter.write(chars, 0, len);
        }
    }catch (Exception ex) {

    } finally {
        if (fileReader != null) {
            fileReader.close();
        }
        if (fileWriter != null) {
            fileWriter.close();
        }
    }
}

BufferedReader/Writer

带缓冲区,效率更高,功能更强大(装饰设计模式)。

public static void main(String[] args) throws Exception {
    BufferedReader bufferedReader = null;
    BufferedWriter bufferedWriter = null;
    try {
        bufferedReader = new BufferedReader(new FileReader(new File("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/傲慢与偏见.txt")));
        bufferedWriter = new BufferedWriter(new BufferedWriter(new FileWriter("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/傲慢与偏见2.txt")));
        String line = null;
        while ((line = bufferedReader.readLine()) != null) {
            bufferedWriter.write(line);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        if (bufferedReader != null) {
            bufferedReader.close();
        }
        if (bufferedWriter != null) {
            bufferedWriter.close();
        }
    }
}

标准输入输出流

System.in(BufferedInputStream) 是标准输入,System.out(PrintStream) 是标准输出。

public static void main(String[] args) {
    //java.io.BufferedInputStream
    System.out.println(System.in.getClass());
    //java.io.PrintStream
    System.out.println(System.out.getClass());

    Scanner scanner = new Scanner(System.in);
    String input = scanner.next();
    System.out.println("input -> " + input);
}

转换流

InputStreamReader和OutputStreamReader,将字节流转换成字符流。

public static void main(String[] args) throws Exception {
    BufferedReader bufferedReader = null;
    BufferedWriter bufferedWriter = null;
    try {
        bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/傲慢与偏见.txt"), StandardCharsets.UTF_8));
        bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/傲慢与偏见3.txt"), StandardCharsets.UTF_8));
        String line = null;
        while ((line = bufferedReader.readLine()) != null) {
            bufferedWriter.write(line);
            bufferedWriter.newLine();
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        if (bufferedReader != null) {
            bufferedReader.close();
        }
        if (bufferedWriter != null) {
            bufferedWriter.close();
        }
    }
}

打印流

PrintStream和PrintWriter,打印流只有输出流,没有输入流,将数据打印到指定的输出流中,PrintStream处理字节流,PrintWriter负责处理字符流。

//PrintStream
public static void main(String[] args) throws Exception{
    PrintStream printStream = System.out;
    printStream.println("print stream");

    //修改标准输出的位置
    System.setOut(new PrintStream("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/sys.out"));
    System.out.println("print stream");
    printStream.close();    
}

//PrintWriter
public static void main(String[] args) throws Exception {
    PrintWriter printWriter = new PrintWriter(System.out);
    printWriter.println("print writer");
    printWriter.close();

    PrintWriter printWriter1 = new PrintWriter(new FileOutputStream("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/printwrite.out"));
    printWriter1.println("print writer");
    printWriter1.close();
}

Properties

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

    Properties properties = new Properties();
    //加载
    properties.load(new FileInputStream("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/p.properties"));
    System.out.println(properties.getProperty("id"));
    properties.setProperty("name", "lisi");
    //写出
    properties.store(new FileWriter("/Users/dongzhang/develop/workspace/echo20222022/java-base/src/main/resources/p1.properties"), "");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

echo20222022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值