zoukankan      html  css  js  c++  java
  • java中文件的I/O操作

    java中文件的读写操作

    (一)

    (1)java中文件的字节转成字符读操作

    1
    2
    3
    4
    5
         FileInputStream fStream = new FileInputStream("test.txt");//此时为字节流<br>
         byte[] b = new byte[31];//定义字节数组存储从文件夹中读取的数据,大小最多31字节
    <br>     fStream.read(b);//将test.txt的数据读到b中
    <br>     String line = new String(b,"UTF-8");//将字节转换成字符
    <br>     System.out.println(line);//打印输出

      以上是简单的字节转字符输出的例子,当数据量较大时,应该重复读取

    1
    2
    3
    4
    5
    while(fStream.read(b)!=-1)
    <br>{
    <br>       String line=new String(b,"UTF-8");
    <br>       System.out.println(line);
    <br>}

    (2

    )java中文件的字符转为字节写操作

    1
    2
    3
    4
    FileOutputStream fos = new FileOutputStream("test.txt");
    <br>String line="hello world";
    <br>byte b[]=line.getBytes();//将字符转换成字节
    <br>fos.write(b);通过字节流写入文件<br><br>fos.close();//关闭

      (二)

    利用缓冲区来进行文件的写入和写出,都是以缓冲区为中介,java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。

    (1)利用缓冲区向文件写入数据

    1
    2
    3
    4
    5
    6
    7
    String line="hello";
    <br>FileOutputStream fos = new FileOutputStream("test.txt");
    <br>BufferedWriter bfr = new BufferedWriter(new OutputStreamWriter(fos));//
    <br>bfr.write(line);//向缓冲区写入数据
    <br>bfr.flush();//清理缓冲区,将数据全部传入文件
    <br>bfr.close();//关闭缓冲区
    <br>fos.close();//关闭文件输出流

     为什么用到flush(),因为缓冲区对于小数据,可能要等到存满一定量的数据才会向文件写入,造成一定的数据滞留,利用flush可以将滞留的数据一起输送给文件,防止文件数据的丢失。

    (2)利用缓冲区从文件中读取数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    FileInputStream fis = new FileInputStream("test.txt");
      
    BufferedReader bfr = new BufferedReader(new InputStreamReader(fis));
                  
    String line=null;
       
    while((line=bfr.readLine())!=null)//从读缓冲区一行一行的读取数据
    {
          System.out.println(line);
    }
    bfr.flush();//清空缓冲区<br>
    bfr.close();//关闭缓冲区
     
    fis.close();//关闭文件输入流

     bfr.readline()是通过从缓冲区以行为单位读取数据,BufferReader是通过将字节转换成字符类。

    另外关于文件的写入不覆盖新的数据,方法 

    FileOutputStream os = new FileOutputStream("test.txt", true);//true表示每次添加到文件末尾,从而不删除原有数据

    (三)关于FileReader和FileWriter

    (1)FileReader

    FileReader类创建了一个可以读取文件内容的Reader类。比较适用于纯文本文件

        例如,从一个文件逐行读取并把它输出到标准输入流。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    import  java.io.*;
     
        class FileReaderDemo {
     
            public static void main (String args[ ] ) throws Exception {
     
                FileReader fr =  new FileReader ("c://in.txt");
     
                BufferedReader br = new BufferedReader (fr);
     
                String s;
     
                 while ((s = br.readLine() )!=null) {
     
                     System.out.prinln (s);
     
                  }
     
                fr.close();
     
          }
     
        }

    (2)FileWriter

    FileWriter 创建一个可以写文件的Writer类。构造函数:

        FileWriter (String filePath)  filePath 是一个文件的完整路径

        FileWriter(String filePath, boolean append)  如果append为true ,输出是附加到文件尾的,即不覆盖原数据

        FileWriter(File fileObj)  是描述该文件的File对象

    1
    2
    3
    4
    5
    6
    7
    FileWriter fr = new FileWriter("test.txt");
    BufferedWriter bfw = new BufferedWriter(fr);
    String linString="hello World";
    bfw.write(linString);
    bfw.flush();
    bfw.close();
    fr.close();
  • 相关阅读:
    2019-5-24-WPF-源代码-从零开始写一个-UI-框架
    2019-8-31-dotnet-通过-WMI-获取系统安装的驱动
    2018-12-18-WPF-一个空的-WPF-程序有多少个窗口
    2018-11-20-UWP-开发中,需要知道的1000个问题
    2019-8-31-C#-已知点和向量,求距离的点
    2018-10-31-C#-7.0-使用下划线忽略使用的变量
    2019-3-16-win10-uwp-鼠标移动到图片上切换图片
    MSP432 BSL流程(UART)
    UART串口简介
    C++ STL容器
  • 原文地址:https://www.cnblogs.com/scote/p/4812993.html
Copyright © 2011-2022 走看看