• 学习java的第二十七天。。。(输入输出流)


    今天学习了输入输出流中的几个类,1、InputStream类(抽象类)2、FileInputStream类(InputStream类的子类)3、OutputStream类(抽象类)4、FileOutputStream类(OutputStream类的子类)5、Reader类(抽象类)6、InputStreamReader类(Reader类的子类)7、FileReader类(InputStreamReader类的子类)8、BufferedReader类(Reader类的子类)9、Writer类(抽象类)10、OutputStreamWriter类(Writer类的子类)11、FileWriter类(OutputStreamWriter类的子类)12、BufferedWriter类(Writer类的子类)

    通过流来读写文件

        流是一组有序的数据序列
        以先进先出方式发送信息的通道

    Java流的分类

    InputStream类常用方法

        int read( )
        int read(byte[] b)
        int read(byte[] b,int off,int len)
        void close( )
        int available():可以从输入流中读取的字节数目

    FileInputStream常用的构造方法

        FileInputStream(File file)
        FileInputStream(String name)

    使用FileInputStream 读文本文件

        引入相关の类
            import java.io.IOException;
            import java.io.FileInputStream;
        构造文件输入流
            FileInputStream fis= new FileInputStream("c:\\test.txt");
        读取文本文件的数据
            fis.available(); 
            fis.read(); 
        关闭文件流对象
            fis.close(); 

    1. public static void main(String[] args) throws IOException {
    2. //创建对象
    3. FileInputStream fis = new FileInputStream("f:/a.txt");
    4. //读取数据,将读取到的数据存储在声明的数组中
    5. byte[] bytes = new byte[1024];
    6. int num=fis.read(bytes);
    7. System.out.println(num);
    8. //遍历数组获取读取到的数据
    9. for (int i = 0; i < num; i++) {
    10. System.out.print((char)bytes[i]);
    11. }
    12. //数据读取完毕之后,关闭流
    13. fis.close();
    14. }

    OutputStream类常用方法

        void write(int c)
        void write(byte[] buf)
        void write(byte[] b,int off,int len)
        void close()
        void flush():强制把缓冲区的数据写到输出流中

    FileOutputStream常用的构造方法

        FileOutputStream (File file)
        FileOutputStream(String name)    
        FileOutputStream(String name,boolean append)
        1.前两种构造方法在向文件写数据时将覆盖文件中原有的内容
        2.创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件

    使用FileOutputStream 写文本文件

        引入相关の类
            import java.io.IOException;
            import java.io.FileOutputStream;
        构造文件输出流
            FileOutputStream fos = new FileOutputStream("text.txt");
        读取文本文件的数据
            String str ="好好学习Java";
            byte[] words  = str.getBytes();
            fos.write(words, 0, words.length);
        关闭文件流对象
            fos.close(); 

     

    1. //创建FileOutputStream类对象
    2. FileOutputStream fos = null;
    3. try {
    4. fos = new FileOutputStream("F:/a.txt", true);
    5. // 准备数据
    6. String strs = "asdfgfhjk";
    7. // 将字符串strs转换成字节数组
    8. byte[] bytes = strs.getBytes();
    9. //开始写数据
    10. fos.write(bytes);
    11. System.out.println("文件写入完毕");
    12. } catch (FileNotFoundException e) {
    13. e.printStackTrace();
    14. } catch (IOException e) {
    15. e.printStackTrace();
    16. } finally {
    17. try {
    18. fos.close();
    19. } catch (IOException e) {
    20. e.printStackTrace();
    21. }
    22. }

    Reader类常用方法

        int read( )
        int read(char[] c)
        read(char[] c,int off,int len)
        void close( )

     子类InputStreamReader常用的构造方法

        InputStreamReader(InputStream in)
        InputStreamReader(InputStream in,String charsetName)

    1. System.out.println(System.getProperty("file.encoding"));
    2. //创建File类对象
    3. File file = new File("F:/a.txt");
    4. //创建InputStream类的引用(InputStream是一个抽象类,无法实例化,可以创建其子类对象)
    5. InputStream is=null;
    6. //创建InputStreamReader类对象
    7. InputStreamReader isr=null;
    8. try {
    9. is = new FileInputStream(file);
    10. isr = new InputStreamReader(is, "utf-8");
    11. char[] chs = new char[1024];
    12. int num=isr.read(chs);
    13. for (int i = 0; i < num; i++) {
    14. System.out.print(chs[i]);
    15. }
    16. } catch (FileNotFoundException e) {
    17. e.printStackTrace();
    18. } catch (IOException e) {
    19. // TODO Auto-generated catch block
    20. e.printStackTrace();
    21. }finally{
    22. try {
    23. isr.close();
    24. is.close();
    25. } catch (IOException e) {
    26. // TODO Auto-generated catch block
    27. e.printStackTrace();
    28. }
    29. }

    FileReader类是InputStreamReader的子类

    FileReader(File file)
    FileReader(String name)
    该类只能按照本地平台的字符编码来读取数据,用户不能指定其他的字符编码类型
    System.out.println(System.getProperty("file.encoding"));  获得本地平台的字符编码类型

     使用FileReader读取文件

        引入相关的类
            import java.io.Reader;
            import java.io.FileReader;
            import java.io.IOExceprion;
        创建FileReader对象
            Reader fr= new FileReader("D:\\myDoc\\简介.txt");
        读取文本文件的数据
            fr.read();
        关闭相关的流对象
            fr.close();

     

    1. //创建对象,File类对象只能按照本地平台的编码格式读取文件,如果文件编码和本地平台不一样,会出现乱码的现象
    2. FileReader fr =null;
    3. try {
    4. fr = new FileReader("F:/a.txt");
    5. char[] chs = new char[1024];
    6. //读取数据
    7. int num=fr.read(chs);
    8. for (int i = 0; i < num; i++) {
    9. System.out.println(chs[i]);
    10. }
    11. } catch (FileNotFoundException e) {
    12. e.printStackTrace();
    13. } catch (IOException e) {
    14. e.printStackTrace();
    15. }finally{
    16. try {
    17. fr.close();
    18. } catch (IOException e) {
    19. e.printStackTrace();
    20. }
    21. }

    BufferedReader类

    BufferedReader类是Reader类的子类
    BufferedReader类带有缓冲区
    按行读取内容的readLine()方法
    BufferedReader常用的构造方法
        BufferedReader(Reader in)
    子类BufferedReader特有的方法
         readLine()

    Writer类常用方法

        write(String str)
        write(String str,int off,int len)
        void close()
        void flush()

     子类OutputStreamWriter常用的构造方法

        OutputStreamWriter(OutputStream out)
        OutputStreamWriter(OutputStream out,String charsetName)

    FileWriter类是OutputStreamWriter的子类

    FileWriter (File file)
    FileWriter (String name)
    该类只能按照本地平台的字符编码来写数据,用户不能指定其他的字符编码类型

    使用FileWriter写文件

    引入相关的类
        import java.io.Reader;
        import java.io.FileWriter;
        import java.io.IOException;
    创建FileReader对象
        Writer fw= new FileWriter("D:\\myDoc\\简介.txt");
    写文本文件
        fw.write();
    关闭相关的流对象
        fw.close();

    1. Writer writer=null;
    2. BufferedWriter bw=null;
    3. try {
    4. writer = new FileWriter("f:/demo.txt",true);
    5. bw = new BufferedWriter(writer);
    6. //先向文件中插入一个换行
    7. bw.newLine();
    8. bw.write("sahdk");
    9. bw.newLine();
    10. bw.write("dsjlfsda");
    11. System.out.println("数据写入完毕");
    12. } catch (IOException e) {
    13. // TODO Auto-generated catch block
    14. e.printStackTrace();
    15. }finally{
    16. try {
    17. bw.close();
    18. writer.close();
    19. } catch (IOException e) {
    20. // TODO Auto-generated catch block
    21. e.printStackTrace();
    22. }
    23. }

    BufferedWriter类 

    BufferedWriter类是Writer类的子类
    BufferedWriter类带有缓冲区
    BufferedWriter常用的构造方法
         BufferedWriter(Writer out)

    使用BufferedWriter写文件

        引入相关的类
            import java.io.FileWriter ;
            import java.io.BufferedWriter ;
            import java.io.IOException;
        创建BufferedWriter对象和fileWriter对象
            FileWriter fw=new FileWriter("C:\\myTest.txt"); 
            BufferedWriter bw=new BufferedWriter(fw);
        调用write()方法写数据
            bw.write("hello");
        流对象的清空和关闭flush()和close()
            bw.flush();  
            fw.close();

  • 相关阅读:
    1 动态规划
    Flink学习(七)-单词统计
    删除的数据如何恢复?误删了文件怎么恢复
    【计算机网络笔记】OSI参考模型中端-端层(传输层、会话层、表示层、应用层)功能介绍
    Git-分布式版本控制工具教程
    uniapp中table表格设置宽度无效的原因及解决办法
    区块链技术与人工智能如何相互赋能
    网站过度优化有哪些预兆?
    Jmeter接口测试和性能测试
    ARM PWN
  • 原文地址:https://blog.csdn.net/qihaojinqiuma/article/details/126387790