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[])结束*/
          } 
          
    }
  • 相关阅读:
    虚函数和纯虚函数
    MS CRM 2011中PartyList类型字段的实例化
    MS CRM 2011的自定义与开发(12)——表单脚本扩展开发(4)
    MS CRM 2011的自定义与开发(12)——表单脚本扩展开发(2)
    MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第二部分)——IOrganizationService(二)
    MS CRM 2011 SDK 5.08已经发布
    MS CRM 2011 Q2的一些更新
    最近很忙
    Microsoft Dynamics CRM 2011最近的一些更新
    补一篇,Update Rollup 12 终于发布了
  • 原文地址:https://www.cnblogs.com/cs-forget/p/7719590.html
Copyright © 2011-2022 走看看