zoukankan      html  css  js  c++  java
  • 71-IO 流

    JAVA IO 流

    一.概括

    1.IO(INPUT OUTPUT)流

    1.1 IO 流用来处理设备之间的数据传输
    1.2JAVA 对数据的操作是通过流的方式
    1.3 JAVA 用于操作流的对象都在 IO 包中
    1.4 流按操作数据分两种:字节流与字符流
    

    2. IO 流常用基类

    2.1 字节流的抽象基类

    InputStream, OutputStream
    
    

    2.2 字符流的抽象基类

    Reader, Writer
    (注: 由这四个类派生出来的子类名称都是以其父类名作为子类名
    如: InputStream 的子类 FileInputStream.
    Reader 的子类 FileReader
    )
    

    3. 程序书写

    3.1 对 IO 异常处理

    必须要捕获异常
    原因:
    1 捕获了异常,报告读取错误,然后由用户处理
    2 程序继续读,还读不到,继续读。。。。。直到永远...
    

    3.2在 finally 中对流进行关闭

    思考:
    有了垃圾回收机制为什么还要调用 close 方法关闭
    答:Java有垃圾回收机制就像是我们的清洁工,每天会定时的打扫街道两三次,
    
    但是如果路人不爱清洁;每时每刻都在制造垃圾,,那么我们的街道时时刻刻都是脏的。而清洁工的能力和工作次数是有限的,,在这种情况下就是我们的街道也就是内存会处于高负荷状态。跟没有清洁工没两样了。。
    
    因为java的垃圾回收,用户是没有办法控制的,它会在不确定的时候触发,而且java不保证在整个程序运行期一定会触发垃圾回收,所以对于流、socket等之类的资源用完之后一定要关闭。而且垃圾回收机制对于socket、thread之类的对象即使引用计数为0了,只要还是在活动的情况下,也不会被回收。
    

    二. 字符流(纯文本文件不包括图片)

    1.创建文件

    public static void testFileWriter(){
            FileWriter fw  = null;
            try {
                fw = new FileWriter("/Users/zzy/Downloads/filewriter.txt");
                fw.write("鲁A08Z72");
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (fw != null){
                    try {
                        fw.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
        }
    

    2.读取文件

    public static void testFileReader(){
                FileReader fr = null;
                try {
                    fr = new FileReader("/Users/zzy/Downloads/项目整合步骤.txt");
                    char[] buf = new char[1024];
                    int len = 0;
    
                    while ((len = fr.read(buf)) != -1){
                        System.out.println(new String(buf, 0, len ));
                    }
    
                } catch (Exception e) {
    
                    System.out.println("read-exception:" + e.toString());
                } finally {
                    if (fr != null){
                        try {
                            fr.close();
                        } catch (IOException e) {
    
                            System.out.println("close-exception:"+ e.toString());
                        }
                    }
                }
    
    
        }
    

    3.字符流的缓冲区

    BufferedWriter
    BufferdReader
    
    

    三. 字节流(二进制文件,十六进制文件)

    public static void readFile_2()throws IOException
        {
            FileInputStream fis = new FileInputStream("fos.txt");
    
            byte[] buf = new byte[1024];
            int len = 0;
            while((len=fis.read(buf))!=-1)
            {
                System.out.println(new String(buf,0,len));
            }
    
            fis.close();
    
        }
    
    public static void writeFile()throws IOException
        {
            FileOutputStream fos = new FileOutputStream("fos.txt");
    
    
            fos.write("abcde".getBytes());
    
            fos.close();
    
    
        }
    

    四.字节流转字符流

    转换流: InputStreamReader,
    OutputStreamWriter

    public static void  testTransformer(){
            //获取键盘录入对象。
            //InputStream in = System.in;
    
            //将字节流对象转成字符流对象,使用转换流。InputStreamReader
            //InputStreamReader isr = new InputStreamReader(in);
    
            //为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader
    
            //BufferedReader bufr = new BufferedReader(isr);
    
    
            //键盘的最常见写法。
            BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
    
    //		OutputStream out = System.out;
    //		OutputStreamWriter osw = new OutputStreamWriter(out);
    //		BufferedWriter bufw = new BufferedWriter(osw);
            BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
    
            String line = null;
    
            try {
                while((line=bufr.readLine())!=null)
                {
                    if("over".equals(line))
                        break;
                    bufw.write(line.toUpperCase());
                    bufw.newLine();
                    bufw.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (bufw != null){
                    try {
                        bufr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
    
        }
    
  • 相关阅读:
    TMS 例子63 分组,子node
    读写注册表 registrykey 创建删除
    如何打开 系统信息窗体和 DirectX诊断工具
    Socket 类通信例子-第24章
    判断IP地址是否合法类
    MySQL存储过程与存储函数的区别
    电脑设定自动开关机,并记录开关机时间
    WPS 表格筛选两列相同数据-完美-2017年11月1日更新
    通过TStringList保存csv文件,只要循环.Add表格里面的每行记录进去,保存即可
    Delphi中滚动文字的应用
  • 原文地址:https://www.cnblogs.com/chaoren399/p/5484374.html
Copyright © 2011-2022 走看看