zoukankan      html  css  js  c++  java
  • java基础——IO

    IO流

    在 Java IO 中,流是一个核心的概念。流表示的是连续的数据,称之为数据流。我们既可以读取流中的数据,也可向流中写入数据。在 Java IO 中,根据读写数据的类型不同,可以将流分为两种类型:字节流(按字节读取数据),字符流(按字符读取数据)。

    java.io 包提供了操作流的类,而这些类的顶层父类如下(输入和输出是相对于 JVM 来说的):

     字节流字符流
    输入流 InputStream Reader
    输出流 OutputStream Writer

     字节流

    计算机中的文件都是以字节的形式进行存储。

    字节输出流——OutputStream

     以上就是 OutputStream 类的所有方法。OutputStream 只是提供了一些共用的方法,其直接子类共有六个。

     FileOutputStream

    该类是向磁盘文件中写入数据。以下是其构造方法和一般方法。

     

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class IOTest {
        
        public static void main(String[] args) throws IOException {
            
            File file = new File("D:\javaTest\IO\a.txt");
            
            //创建一个输出流对象, 参数是一个File对象, 路径必须是实际存在的, 否则会报FileNotFoundException
            //如果路径下的文件不存在, 则会创建该文件
            FileOutputStream out = new FileOutputStream(file);
            
            //调用write()方法, 向文件中写入数据, 只能以字节的方式写入
            out.write(97);   //写入文件的是字母 a
            
            //关闭数据流, 释放资源
            out.close();
            
        }
    }
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class IOTest {
        
        public static void main(String[] args) throws IOException {
            
            File file = new File("D:\javaTest\IO\a.txt");
            
            //创建一个输出流对象, 参数是一个File对象, 路径必须是实际存在的, 否则会报FileNotFoundException
            //如果路径下的文件不存在, 则会创建该文件
            FileOutputStream out = new FileOutputStream(file);
            
            //写入数据会先转换为ASII码, 然后在根据ASII码写入数据
            //调用write(Byte byte)方法, 向文件中写入数据, 以单个字节的方式写入
            out.write(97);   //写入文件的是字母 a
            
            //调用write(Byte []byte)方法, 向文件中写入数据, 以字节数组的方式写入
            //如果某个字节是负数,那该字节就会与后一个字节一起以GBK编码格式显示字符
            byte[] bytes = {-47, 64, -65, -66};
            out.write(bytes);   //写入的是  袬烤
            
            //如果想写入一个字符串, 可以使用String类中的getBytes();
            String str = "向文件中写入字符串";
            out.write(str.getBytes());
            
            //关闭数据流, 释放资源
            out.close();
            
        }
    }
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class IOTest {
        
        public static void main(String[] args) throws IOException {
            
            File file = new File("D:\javaTest\IO\a.txt");
            
            //通过构造函数 FileOutputStream(File file, boolean append)向文件中续写数据,不会覆盖
            //append为true表示续写, 为false会创建一个新文件覆盖原文件
            FileOutputStream out = new FileOutputStream(file, true);
            
            out.write("可以".getBytes());
            out.write("向文件".getBytes());
            out.write("中".getBytes());
            
            out.write("
    ".getBytes());  //换行
            
            out.write("续写数据".getBytes());
            
            //关闭数据流, 释放资源
            out.close();
            
        }
    }

    字节输入流——InputStream

     

     

     FileInputStream

     

    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class IOTest {
        
        public static void main(String[] args) throws IOException {
            
            FileInputStream in = new FileInputStream("D:\javaTest\IO\a.txt");
            
            int len1 = 0; 
            while((len1 = in.read()) != -1) {  //read()每次只能读入一个字节, 方法调用一次指针就后移一位
                System.out.println(len1);      
            }
            
            byte[] bytes = new byte[2];
            int len2 = 0;
            while((len2 = in.read(bytes)) != -1) {  //read(byte []bytes), 每次最多读取byte数组的长度个字节 
                System.out.println(new String(bytes, 0, len2)); //读取byte数组中有效的字节个数,以免出现空格或数组之前的内容
            }
            
            //关闭数据流, 释放资源
            in.close();
            
        }
    }

    字符流

    字符流与包括读(Reader)和写(Writer),每次读或写一个字符。使用方式和字节流一样,只需要把 InputStream 和 OutputStream 替换成 Reader 和 Writer。

    字符输入流——Reader

    import java.io.FileReader;
    import java.io.IOException;
    
    public class IOTest {
        
        public static void main(String[] args) throws IOException {
            
            FileReader reader = new FileReader("D:\javaTest\IO\a.txt");
            
            
            int len1 = 0; 
            while((len1 = reader.read()) != -1) {  //read()每次只能读入一个字节, 方法调用一次指针就后移一位
                System.out.print((char)len1);      
            }
            
            char[] c = new char[2];
            int len2 = 0;
            while((len2 = reader.read(c)) != -1) {  //read(byte []bytes), 每次最多读取byte数组的长度个字节
                System.out.print(new String(c, 0, len2)); //读取byte数组中有效的字节个数,以免出现空格或数组之前的内容
            }
            
            //关闭数据流, 释放资源
            reader.close();
            
        }
    }

    字符输出流

    import java.io.FileWriter;
    import java.io.IOException;
    
    public class IOTest {
        
        public static void main(String[] args) throws IOException {
            
            FileWriter writer = new FileWriter("D:\javaTest\IO\a.txt", true);
            
            writer.write("字符写入文件");
            
            writer.flush();  //写完数据必须刷新回硬盘
            
            char[] c = {'可', '以', '通', '过', '数', '组' };
            writer.write(c);
            writer.flush();
            
            //关闭数据流, 释放资源
            writer.close();
            
            //flush()和close()都可以把缓冲刷新回内存, 但是flush()使用后还可以继续使用流, 而close则已经关闭了流
            
        }
    }

    参考文献

    Java IO

  • 相关阅读:
    循环语句
    流程控制
    特殊的赋值运算符
    位运算符
    运算符
    八种基本类型
    cmd基础命令
    springboot项目部署到tomcat步骤以及常见问题
    【算法问题】如何实现大整数相加
    【算法问题】删除k个数字后的最小值
  • 原文地址:https://www.cnblogs.com/Zz-feng/p/13339214.html
Copyright © 2011-2022 走看看