zoukankan      html  css  js  c++  java
  • java

    字节流:

    FileInputStream

    FileOutputStream

    字节流每次读取一个字节,好处是什么类型文件都可以读取,坏处是处理纯文本时可能出现问题(中文每个字占2个字节,可能导致读取错误出现乱码)。

    字符流:

    FileReader, FileWriter

    只能操作纯文本文件(右键记事本可以打开而且不影响内容),txt,html等。

    字节流用byte接收数据,byte是8位

    字符流用char接受数据,char是16位

    汉字占用两个字节,也就是16位

    所以字节流有可能乱码,而字符流不会。

    两者用房上基本相同,只是参数一个是byte一个是char

    FileReader:

    package io;
    
    import java.io.FileInputStream;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class FileReaderTest {
        public static void main(String[] args){
    
            FileReader fr = null;
            FileInputStream fis = null;
    
            try {
                fr = new FileReader("C:\Users\Administrator\Desktop\test\filereadertest.txt");
                fis = new FileInputStream("C:\Users\Administrator\Desktop\test\filereadertest.txt");
                char[] c = new char[5];
                int count = fr.read(c);
                while(count != -1){
                    System.out.println("---|" + new String(c) + "|---");
                    count = fr.read(c);
                }
                //---|你好世界,|---
                //---|
                //你好I|---
                //---|/O。好I|---
    
                byte[] b = new byte[5];
                count = fis.read(b);
                while(count != -1){
                    System.out.println("---|" + new String(b) + "|---");
                    count = fis.read(b);
                }
                //---|你好?|---
                //---|澜纾?|---
                //---|
                //你?|---
                //---|肐/O?|---
                //---|�/O?|---
    
                //字节型出现了乱码,字符型没有
                //因为字符型每次读取了一个char是16位的,而字节型只能使用byte读取,每次是8位,每个汉字是16位,所以字节型会出现乱码
    
    
    
    
            }catch(Exception e){
                e.printStackTrace();
            }finally {  //使用fianlly保证流能关闭
                if (fr != null) {
                    try {
                        fr.close(); //关闭流
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (fis != null) {
                    try {
                        fis.close(); //关闭流
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
    
        }
    }

    FileWriter

    package io;
    
    import java.io.FileOutputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class FileWriterTest {
    
        public static void main(String[] args){
    
                FileWriter fw = null;
                FileOutputStream fos = null;
    
                try {
                    fw = new FileWriter("C:\Users\Administrator\Desktop\test\fileWriterTest.txt"); //没有这个文件的话会新建一个
                    fos = new FileOutputStream("C:\Users\Administrator\Desktop\test\fileWriterTest.txt", true);//第二个参数是是否在原有的后面添加,默认是false也就是覆盖,FileWriter同理
    
                    fw.write("你好啊世界,
    你好难啊I/O。
    ");  //windows中txt的换行是
    ,如果想在文本中添加字符串“
    ”,要用“\r\n”则会输出“
    ”。
                    fw.flush();//以前必须写,现在新版本会自动推送- -不过为了适应各种版本最好都写上
                    //你好啊世界,
                    //你好难啊I/O。
    
                    fos.write("你好啊世界,
    你好难啊I/O。
    ".getBytes());  //把String转化为byte[]数组,然后可以用字节流存取。
                    fos.flush();//以前必须写,现在新版本会自动推送- -不过为了适应各种版本最好都写上
                    //你好啊世界,
                    //你好难啊I/O。
                    //因为是一次性全部存入不用分割所以貌似问题不大- -,可能更复杂的情况下需要分批输入的时候才有效果
    
                }catch(Exception e){
                    e.printStackTrace();
                }finally {  //使用fianlly保证流能关闭
                    if (fw != null) {
                        try {
                            fw.close(); //关闭流
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (fos != null) {
                        try {
                            fos.close(); //关闭流
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
    
        }
    }
  • 相关阅读:
    使用GitHub+hexo搭建个人独立博客
    HDU 3038
    POJ 1417
    HDU 1213
    ZOJ 3781
    ZOJ 3780
    ZOJ 3777
    HDU 3045
    HDU 3480
    POJ 1180
  • 原文地址:https://www.cnblogs.com/clamp7724/p/11640731.html
Copyright © 2011-2022 走看看