zoukankan      html  css  js  c++  java
  • java io总结

    这篇文章思路还不错,原文链接:http://blog.csdn.net/yczz/article/details/38761237

    总结一下java io,记录自己的学习过程

    首先看图(这只是io的一部分,查看API会发现比这庞大很多)

    一 java io开始

    io就是指流,流是从文件开始,相关处理类是FIle类

    package com.shangcg.io;
    
    import java.io.File;
    
    /**
     * File类简述(只是简述常用,并非全部)
     * 1 File类有4个public的构造函数
     *         new file(String)
     *         new file(String,String)
     *         new file(File,String)
     *         new file(URI)
     * 2 创建方法
     *      1.boolean createNewFile() 不存在返回true 存在返回false
            2.boolean mkdir() 创建目录
            3.boolean mkdirs()创建多级目录
       3 删除方法
            1.boolean delete()
            2.boolean deleteOnExit() 文件使用完成后删除
       4 判断方法
            1.boolean canExecute()判断文件是否可执行
            2.boolean canRead()判断文件是否可读
            3.boolean canWrite() 判断文件是否可写
            4.boolean exists() 判断文件是否存在
            5.boolean isDirectory() 
            6.boolean isFile()
            7.boolean isHidden()
            8.boolean isAbsolute()判断是否是绝对路径 文件不存在也能判断
        5 获取方法
            1.String getName()
            2.String getPath()
            3.String getAbsolutePath()
            4.String getParent()//如果没有父目录返回null
            5.long lastModified()//获取最后一次修改的时间
            6.long length()
            7.boolean renameTo(File f)
            8.File[] listRoots()//获取机器盘符
            9.String[] list() 
            10.String[] list(FilenameFilter filter)
     *
     */
    public class FileDemo {
    
         public static void main(String[] args) {  
               
                createFile();  
            }  
           
          /** 
           * 文件处理示例 
           */  
          public static void createFile() {  
            File f=new File("E:/电脑桌面/jar/files/create.txt");  
            try{  
               f.createNewFile();  //当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。  
               System.out.println("该分区大小"+f.getTotalSpace()/(1024*1024*1024)+"G");//返回由此抽象路径名表示的文件或目录的名称。  
               f.mkdirs();  //创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。  
               System.out.println("文件名  "+f.getName());  //  返回由此抽象路径名表示的文件或目录的名称。  
               System.out.println("文件父目录字符串 "+f.getParent());// 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。  
            }catch (Exception e) {  
                e.printStackTrace();  
            }  
          }  
    }

    二 字节流(通常用于图片、音频等处理)

    由开头图片可知

    InputStream这个抽象类是所有基于字节的输入流的超类,OutputStream这个抽象类是所有基于字节的输出流的超类

    package com.shangcg.io;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    /**
     * InputStream简述
     * 
     *     1 读入相关方法:读入相关的方法是这个类的核心方法。有3种重载的形式
     *         1 int read() 读取流的下一个字节,到达流末尾返回-1
     *         2 int read(byte b[]) 
     *         3 int read(byte b[], int off, int len)
     *
     *    2 int available()读入(调用read)或者跳过(skip)之前先探测一下有多少可用字节
     *    3 long skip(long n) 跳过当前流的n个字节,返回实际跳过的字节数
     *    4 void mark(int readlimit)用于在流的当前位置做个标记,参数readLimit指定这个标记的“有效期“
     *    5 void reset()用于重定位到最近的标记。如果在这之前mark方法从来没被调用,或者标记已经无效,则抛出IOException
     *    6 boolean markSupported()检测当前流对象是否支持标记。是返回true。否则返回false
     *    7 void close()关闭当前流,释放与该流相关的资源,防止资源泄露
     *
     */
    public class InputStreamDemo {
        
        public static void main(String[] args) throws IOException{
            
            /**available演示开始*/
            /**简述:这个方法通常不单独使用,通常在在读入流之前进行调用检测可读字节数*/
            InputStream is = null;  
            try {  
                is = new FileInputStream("D:/test.txt");  
                System.out.println("available: " + is.available());  
                
            } finally {  
                if (is != null) {  
                    is.close();  
                }  
            }  
            /**available演示结束*/
            
            /**read()演示开始*/
            /**简述:读取输入流的下一个字节,返回一个0-255之间的int类型整数,到达流的末端,返回-1*/
            try {
                is = new FileInputStream("D:/test.txt");  
                int i;  
                while ((i = is.read()) != -1) {  
                    //此处i为字符对应的ascii十进制数字,需要转化char,不信去掉试试
                    System.out.println("out: " + (char)i);  
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {  
                if (is != null) {  
                    is.close();  
                }  
            }   
            /**read演示结束*/
        }
    
    }

    OutPutStream重点方法演示

    package com.shangcg.io;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    
    /**
     * 
     * <p>
     *    OutPutStream简述
     *      OutPutStream只有一个默认的无参构造函数
     *      包含五个方法(可以看出三个重载的输出方法和InputStream的read方法类似)
     *        1 void write(int b) 抽象类中唯一的抽象方法,子类必须实现这个方法,这个write方法中没有输出的目的地,所以实现这个方法的子类必须告诉这一点
     *        2 void write(byte b[]) 直接输出字节数组中的全部内容,实际调用了下面的write(byte b[], int off, int len)方法
     *        3 write(byte b[], int off, int len) 输出从数组off位置开始的len个字节
     *        4 void flush() 清空缓冲区数据,将内存中的数据立刻写出,但不会关闭流
     *        5 void close() 关闭流
     * </p>
     * @author shangcg
     * @since 2017年10月25日
     */
    public class OutPutStreamDemo {
      
        public static void main(String[] args) throws IOException {
          
            /**write(byte b[])演示开始*/
            /**使用File类找到一个文件,作为被写入的文件对象(File.separator解决跨平台文件路径问题)*/
            File f= new File("d:" + File.separator + "outPut.txt");
            OutputStream out = null ; 
            
            // 通过对象多态性,进行实例化
            out = new FileOutputStream(f); 
            
            // 进行写操作
            String str = "Hello World!!!" ; 
            
            // outPustStream没有接收String类型参数的write方法,输出byte数组
            byte b[] = str.getBytes() ; 
            
            // 将内容输出,保存文件(文件不存在会自动创建,文件内容是Hello World!!!)
            out.write(b) ; 
            
            // 关闭输出流
            out.close() ;                        
            
            /**write(byte b[])演示结束*/
        }
     
      
    }

    三 字符流

    由开头图片可知

    reader这个抽象类是所有基于字符的输入流的超类,Writer这个抽象类是所有基于字符的输出流的超类

    reader重要方法演示

    package com.shangcg.io;
    
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.Reader;
    
    /**
     * 
     * <p>
     *    Reader简述
     *      1 读取相关方法
     *          1 int read() 读取流的下一个字符(返回的int型是读取字符对应的ascii码),到达末尾返回-1
     *          2 int read(char cbuf[]) 知道为什么叫字符流了吧,读取的就是字符,装入字符数组
     *          3 int read(char cbuf[], int off, int len) 从off开始,读取len长度的字符,装入cbuf[]
     *      2 long skip(long n) 跳过当前流的n个字节,返回实际跳过的字节数
     *      4 void mark(int readlimit)用于在流的当前位置做个标记,参数readLimit指定这个标记的“有效期“
     *      5 void reset()用于重定位到最近的标记。如果在这之前mark方法从来没被调用,或者标记已经无效,则抛出IOException
     *      6 boolean markSupported()检测当前流对象是否支持标记。是返回true。否则返回false
     *      7 void close()关闭当前流,释放与该流相关的资源,防止资源泄露 
     *      发现和inputStream类方法类似,就是inputStream读取字节,reader读取字符
     * </p>
     * @author shangcg
     * @since 2017年10月25日
     */
    public class ReaderDemo {
    
          public static void main(String[] args) throws IOException {
            
            /**read()开始*/
            File file = new File("d:/test.txt");
            Reader re = new FileReader(file);
            int i=0;
            while ((i=re.read())!=-1) {
              System.out.println((char)i);
            }
            re.close();
            /**read()结束*/
            
            /**read(char cbuf[])开始*/
            File file1 = new File("d:/test.txt");
            char buf[] = new char[5];
            Reader re1 = new FileReader(file1);
            re1.read(buf);
            for (char c:buf) {
              System.out.println("我是reader(char cbuf[])"+ c);//不用进行类型转换直接输出字符,还记得inputStream的输入吗
            }
            re1.close();
            /**read(char cbuf[])结束*/
          } 
          
    }
  • 相关阅读:
    session 、cookie、token的区别
    翻译-In-Stream Big Data Processing 流式大数据处理
    一致性hash算法
    HA 部署wordpress
    HA 高可用mysql集群
    JVM内存监视手段和内存溢出解决方案
    vmware linux NAT CON
    spring SOA architecture
    思路
    cookie和session得区别
  • 原文地址:https://www.cnblogs.com/cs-forget/p/7719590.html
Copyright © 2011-2022 走看看