zoukankan      html  css  js  c++  java
  • 字符流

    学习了字节输入流和字节输出流以后,从指定文件读取n个字节的内容然后写入指定的文件,代码展示如下所示:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    public class Test08 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            File file = new File("E:/test/Test02.java");
            File file1 = new File("E:/test/xiaoming.txt");
            byte b[] = new byte[20];
            int n = -1;
            try{
                InputStream in = new FileInputStream(file);
                OutputStream out = new FileOutputStream(file1);
                while((n = in.read(b, 0, 20)) != -1)
                {
                    //out.write(b);
                    out.write(b, 0, n);
                }
                in.close();
                out.close();
            }
            catch(IOException e)
            {
                
            }
        }
    
    }

    程序运行之后,原本为空的“xiaoming.txt”文件会被写入文件Test02.java的数据内容。

    文件字节输入、输出流的read和write方法使用字节数组读写数据,即以字节为单位处理数据。因此,字节流不能很好地操作Unicode字符,比如,一个汉字在文件占用2个字节,如果使用字节流,读取不当会出现“乱码”现象。

    与FileInputStream、FileOutputStream字节流相对应的是FileReader、FileWriter字符流(文件字符输入、输出流),FileReader和FileWriter分别是Reader和Writer的子类,其构造方法分别是:

    FileReader(String filename);  FileReader(File filename);

    FileWriter(String filename); FileWriter(File filename);

    FileWriter(String finame, boolean append());

    FileWriter (File filename, boolean append);

    字符输入流和输出流的read和write方法使用字符数组读写数据,即以字符为基本单位处理数据。

    代码展示如下所示:

    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Reader;
    import java.io.Writer;
    
    public class Test07 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            File sourceFile = new File("E:/test/a.txt");
            File targetFile = new File("E:/test/b.txt");
            char c[] = new char[19];
            int n = -1;
            try{
                Writer out = new FileWriter(targetFile);
                Reader in = new FileReader(sourceFile);
                while((n = in.read(c)) != -1)
                {
                    out.write(c, 0, n);
                }
                out.flush();
                out.close();
                in.close();
            }
            catch(IOException e)
            {
                
            }
        }
    
    }

    程序运行之后的结果是,将a.txt文件中的内容读取然后写入到b.txt中。

    程序编写过程中,语句

    while((n = in.read(c)) != -1)
                {}

    使用read()无参方法时会出现越界错误。

    将语句OutputStream out = new FileOutputStream(file1)改成OutputStream out = new FileOutputStream(file1, true)那么是在文件xiaoming.txt后边追写数据。

    对于Writer刘,write方法将数据首先写入到缓冲区,每当缓冲区溢出时,缓冲区的内容被自动写入到目的地,如果关闭流,缓冲区的内容会立刻被写入到目的地。流调用flush()方法可以立刻冲洗当前缓冲区,即将当前缓冲区的内容写入到目的地。

  • 相关阅读:
    linux扩展分区
    linux开机出现initramfs无法进入系统
    openCV编译安装-MSCV-Windows10-Qt
    Qt一键部署配置(Qt程序打包)
    Part8 升序排序 和降序排序
    Part7-.简单查询1
    Part6-向表中插入数据
    Part5-修改表(添加字段、删除字段、查看删除是否成功)
    Part4-删除表
    Part3-复制表
  • 原文地址:https://www.cnblogs.com/liaoxiaolao/p/9452790.html
Copyright © 2011-2022 走看看