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[])结束*/
      } 
      
}

 

posted on 2017-10-23 22:31  汴梁砍柴人  阅读(306)  评论(0编辑  收藏  举报