zoukankan      html  css  js  c++  java
  • Java IO如何读写文件

      Java把这些不同来源和目标的数据都统一抽象为数据流;Java语言的输入输出功能是十分强大而灵活的;在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流。

      这里介绍几种读写文件的方式:

    一、InputStream、OutputStream(字节流)

    //读取文件(字节流)
    InputStream in = new FileInputStream("d:\1.txt");
    //写入相应的文件
    OutputStream out = new FileOutputStream("d:\2.txt");
    //读取数据
    //一次性取多少字节
    byte[] bytes = new byte[2048];
    //接受读取的内容(n就代表的相关数据,只不过是数字的形式)
    int n = -1;
    //循环取出数据
    while ((n = in.read(bytes,0,bytes.length)) != -1) {
        //转换成字符串
        String str = new String(bytes,0,n,"GBK"); #这里可以实现字节到字符串的转换,比较实用
        System.out.println(str);
        //写入相关文件
        out.write(bytes, 0, n);
    }
    //关闭流
    in.close();
    out.close();

    二、BufferedInputStream、BufferedOutputStream(缓存字节流)使用方式和字节流差不多,但是效率更高(推荐使用)

    //读取文件(缓存字节流)
    BufferedInputStream in = new BufferedInputStream(new FileInputStream("d:\1.txt"));
    //写入相应的文件
    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("d:\2.txt"));
    //读取数据
    //一次性取多少字节
    byte[] bytes = new byte[2048];
    //接受读取的内容(n就代表的相关数据,只不过是数字的形式)
    int n = -1;
    //循环取出数据
    while ((n = in.read(bytes,0,bytes.length)) != -1) {
        //转换成字符串
        String str = new String(bytes,0,n,"GBK");
        System.out.println(str);
        //写入相关文件
        out.write(bytes, 0, n);
    }
    //清楚缓存
    out.flush();
    //关闭流
    in.close();
    out.close();

    三、InputStreamReader、OutputStreamWriter(字节流,这种方式不建议使用,不能直接字节长度读写)。使用范围用做字符转换

    //读取文件(字节流)
    InputStreamReader in = new InputStreamReader(new FileInputStream("d:\1.txt"),"GBK");
    //写入相应的文件
    OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("d:\2.txt"));
    //读取数据
    //循环取出数据
    byte[] bytes = new byte[1024];
    int len = -1;
    while ((len = in.read()) != -1) {
        System.out.println(len);
        //写入相关文件
        out.write(len);
    }
    //清楚缓存
    out.flush();
    //关闭流
    in.close();
    out.close();

    四、FileReader、FileWriter(提供少量的文本读取和写入文本)

    try{
        //使用FileWriter类写文本文件
        FileWriter writer=new FileWriter(fileName);
        writer.write("Hello Kuka:
    ");
        writer.write("  My name is coolszy!
    ");
        writer.write("  I like you and miss you。");
        writer.close();
    } catch (IOException e){
        e.printStackTrace();
    }
    
    try{
        //使用FileWriter类往文本文件中追加信息
        FileWriter writer = new FileWriter(fileName, true);
        SimpleDateFormat format = new SimpleDateFormat();
        String time = format.format(new Date());
        writer.write("
    	" + time);
        writer.close();
    } catch(IOException e){
        e.printStackTrace();
    }
    
    int c=0;
    try{
        //使用FileReader类读文本文件
        FileReader reader=new FileReader(fileName);
        c=reader.read();
        while(c!=-1) {
            System.out.print((char)c);
            c=reader.read();
        }
        reader.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

    五、BufferedReader、BufferedWriter(缓存流,提供readLine方法读取一行文本)

    //读取文件(字符流)
    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("d:\1.txt"),"GBK"));#这里主要是涉及中文
    //BufferedReader in = new BufferedReader(new FileReader("d:\1.txt")));
    //写入相应的文件
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\2.txt"),"GBK"));
    //BufferedWriter out = new BufferedWriter(new FileWriter("d:\2.txt"));
    //读取数据
    //循环取出数据
    String str = null;
    while ((str = in.readLine()) != null) {
        System.out.println(str);
        //写入相关文件
        out.write(str);
        out.newLine();  //注意
    不一定在各种计算机上都能产生换行的效果
    } //清楚缓存 out.flush(); //关闭流 in.close(); out.close();

    六、Reader、PrintWriter(PrintWriter这个很好用,在写数据的同事可以格式化)

    //读取文件(字节流)
    Reader in = new InputStreamReader(new FileInputStream("d:\1.txt"),"GBK");
    //写入相应的文件
    PrintWriter out = new PrintWriter(new FileWriter("d:\2.txt"));
    //读取数据
    //循环取出数据
    byte[] bytes = new byte[1024];
    int len = -1;
    while ((len = in.read()) != -1) {
        System.out.println(len);
        //写入相关文件
        out.write(len);
    }
    //清楚缓存
    out.flush();
    //关闭流
    in.close();
    out.close();
  • 相关阅读:
    AdvStringGrid 复选框、goRowSelect
    AdvStringGrid 列宽度、列移动、行高度、自动调节
    AdvStringGrid 滚动条问题
    AdvStringGrid 标题头
    常量的 访问限制
    我自己的方法、组件、属性、变量、常量、数据库常用操作命名方法。
    泛型 for to/in 遍历 PK 效率;TEnumerator、TEnumerable
    Hadoop关键任务Job资源隔离方案
    Hadoop动态调整Map Task内存资源大小
    Hadoop动态调整Map Task内存资源大小
  • 原文地址:https://www.cnblogs.com/jing99/p/9266166.html
Copyright © 2011-2022 走看看