zoukankan      html  css  js  c++  java
  • Java文件

    jdk7以后,通过try-with-resources技术,可以在try中实例化资源,让它在结束后自动关闭.

    package stream;
      
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
      
    public class TestStream {
      
        public static void main(String[] args) {
            File f = new File("d:/lol.txt");
      
            //把流定义在try()里,try,catch或者finally结束的时候,会自动关闭
            try (FileInputStream fis = new FileInputStream(f)) {
                byte[] all = new byte[(int) f.length()];
                fis.read(all);
                for (byte b : all) {
                    System.out.println(b);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
      
        }
    }
    

    jdk9中,可以直接在try中使用常量资源,而不需要重新定义了.

    // New and improved try-with-resources statement in JDK 9
    try (resource1;
         resource2) {
        // Use of resource1 and resource 2.
    }
    

    流流

    InputStream输入流/OutputStream输出流.字节输入输出

    FileInputStream fis = new FileInputStream(new File("C:/"));
    

    Reader字符输入流Writer字符输出流(默认按操作系统编码GBK)

    FileReader fr = new FileReader(f);
    

    自定义编码字符流InputStreamReader

    InputStreamReader isr = new InputStreamReader(new FileInputStream(f),Charset.forName("UTF-8"))
    

    字符缓存流BufferedReader PrintWriter flush

            try (
                    FileReader fr = new FileReader(f);
                    BufferedReader br = new BufferedReader(fr);
                )
            {
                while (true) {
                    // 一次读一行
                    String line = br.readLine();
                    if (null == line)
                        break;
                    System.out.println(line);
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
    
    
            try (
                    // 创建文件字符流
                    FileWriter fw = new FileWriter(f);
                    // 缓存流必须建立在一个存在的流的基础上              
                    PrintWriter pw = new PrintWriter(fw);              
            ) {
                pw.println("garen kill teemo");
                pw.println("teemo revive after 1 minutes");
                pw.println("teemo try to garen, but killed again");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
    
    
            //向文件lol2.txt中写入三行语句
            File f =new File("d:/lol2.txt");
            //创建文件字符流
            //缓存流必须建立在一个存在的流的基础上
            try(FileWriter fr = new FileWriter(f);PrintWriter pw = new PrintWriter(fr);) {
                pw.println("garen kill teemo");
                //强制把缓存中的数据写入硬盘,无论缓存是否已满
                    pw.flush();           
                pw.println("teemo revive after 1 minutes");
                    pw.flush();
                pw.println("teemo try to garen, but killed again");
                    pw.flush();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    

    数据流DataInputStream数据输入流 DataOutputStream数据输出流

    数据输入流只能识别数据输出流写入的数据.
    优点在于可以直接读取不同类型的数据.

    package stream;
          
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
          
    public class TestStream {
          
        public static void main(String[] args) {
            write();
            read();
        }
     
        private static void read() {
            File f =new File("d:/lol.txt");
            try (
                    FileInputStream fis  = new FileInputStream(f);
                    DataInputStream dis =new DataInputStream(fis);
            ){
                boolean b= dis.readBoolean();
                int i = dis.readInt();
                String str = dis.readUTF();
                 
                System.out.println("读取到布尔值:"+b);
                System.out.println("读取到整数:"+i);
                System.out.println("读取到字符串:"+str);
     
            } catch (IOException e) {
                e.printStackTrace();
            }
             
        }
     
        private static void write() {
            File f =new File("d:/lol.txt");
            try (
                    FileOutputStream fos  = new FileOutputStream(f);
                    DataOutputStream dos =new DataOutputStream(fos);
            ){
                dos.writeBoolean(true);
                dos.writeInt(300);
                dos.writeUTF("123 this is gareen");
            } catch (IOException e) {
                e.printStackTrace();
            }
             
        }
    }
    

    对象流ObjectInputStream/ObjectOutputStream

    实现了Serializable接口的类的对象可以进行序列化.

    package stream;
        
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
      
    import charactor.Hero;
        
    public class TestStream {
        
        public static void main(String[] args) {
            //创建一个Hero garen
            //要把Hero对象直接保存在文件上,务必让Hero类实现Serializable接口
            Hero h = new Hero();
            h.name = "garen";
            h.hp = 616;
              
            //准备一个文件用于保存该对象
            File f =new File("d:/garen.lol");
     
            try(
                //创建对象输出流
                FileOutputStream fos = new FileOutputStream(f);
                ObjectOutputStream oos =new ObjectOutputStream(fos);
                //创建对象输入流              
                FileInputStream fis = new FileInputStream(f);
                ObjectInputStream ois =new ObjectInputStream(fis);
            ) {
                oos.writeObject(h);
                Hero h2 = (Hero) ois.readObject();
                System.out.println(h2.name);
                System.out.println(h2.hp);
                   
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                
        }
    }
    

    控制台输入流System.in

    用Scanner更加方便的使用控制台输入吧.
    Scanner s = new Scanner(System.in);

    参考资料
    HOW2J教程
    Way Lau

  • 相关阅读:
    ASP.NET页面优化,提高载入速度[转]
    winform app.config文件的动态配置
    ASP.NET 程序中删除文件夹导致session失效解决问题
    ASP.NET网站版本自动更新程序及代码[转]
    swf2pdf转swf时字符集问题【转】
    ASP.NET中EVAL用法大全
    安装sqlserver2012时出现的丧心病狂的错误
    sqlserver2008清日志
    搭建了个静态资源服务器遇到的问题与解决
    获取action name在asp.net mvc
  • 原文地址:https://www.cnblogs.com/bestefforts/p/11345380.html
Copyright © 2011-2022 走看看