`
hujiantao224
  • 浏览: 124706 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java.io包

阅读更多


Input和Output是同一类,而Reader和Writer另属同一类



Reader支持16位的Unicode字符的输出,而InputStream只支持8位字符输出。他们的大概结构如下:



InputStream的子类有:

               FileInputStream,FilterInputStream,ObjectInputStream,StringBufferInputStream等

OutputStream的子类有:

               ByteArrayOutputStream,FileOutputStream,FilterOutputStream,PipedOutputStream,ObjectOutputStream。



Reader的子类有:BufferdReader,InputStreamReader,FilterReader,StringReader,PipedReader,CharArrayReader。

Writer的子类有: BufferedWriter,CharArrayWriter,FilterWriter,OutputStreamWriter,PipedWriter,PrintWriter,StringWriter。



曾遇到一个面试题:

请选择下面的这却答案:



a. System.out 是一个PrintStream。

b. System.out 是一个OutputStream。

c. System.out 是一个FilterOutputStream。

d. System.out 不是一个PrintStream。

e. System.out 在异常时,将抛出IOExcepton。



由于System.out 是一个PrintStream的一个子类,并且PrintStream对象并没有抛出IOException异常。

所以可以看出答案:a b c

例一:InputStream读取文件的应用:

Java代码
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.io.InputStream;  
 
<SPAN style="COLOR: #339966">/** 
*  
* @author liugao ec06 cumt 

*/</SPAN>  
public class TestJavaIo {  
 
    <SPAN style="COLOR: #339966">/** 
     * @param args 
     */</SPAN>  
    public static void main(String[] args) {  
        int b=0;  
        long num=0;  
        InputStream in=null;  
        try {  
            in=new FileInputStream("D:/a.txt");  
        } catch (FileNotFoundException e) {  
            System.out.println("文件找不到");  
            System.exit(-1);  
        }  
        try{  
            while((b=in.read()) !=-1){              <SPAN style="COLOR: #339966">//b读取是字符的AI码</SPAN>  
                System.out.println((char)b);  
                num++;  
            }  
            in.close();  
            System.out.println();  
            System.out.println("共读取了" + num + "个字节");  
              
            }catch(IOException e){  
                System.out.println("文件读取错误");  
                System.exit(-1);  
            }  
        }  
    } 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

/**
*
* @author liugao ec06 cumt
*
*/
public class TestJavaIo {

/**
* @param args
*/
public static void main(String[] args) {
int b=0;
long num=0;
InputStream in=null;
try {
in=new FileInputStream("D:/a.txt");
} catch (FileNotFoundException e) {
System.out.println("文件找不到");
System.exit(-1);
}
try{
while((b=in.read()) !=-1){              //b读取是字符的AI码
System.out.println((char)b);
num++;
}
in.close();
System.out.println();
System.out.println("共读取了" + num + "个字节");

}catch(IOException e){
System.out.println("文件读取错误");
System.exit(-1);
}
}
}




例二:FileReader的应用:

Java代码
import java.io.FileNotFoundException;  
import java.io.FileReader;  
import java.io.IOException;  
 
<SPAN style="COLOR: #339966">/** 
*  
* @author ec06cumt 

*/</SPAN>  
public class TestFileReader {  
 
<SPAN style="COLOR: #339966">   /** 
     * @param args 
     */</SPAN>  
    public static void main(String[] args) {  
        FileReader fr=null;  
        int c=0;  
        int ln=0;  
        try {  
            fr=new FileReader("D:/a.txt");  
            while((c=fr.read())!=-1){  
                System.out.println((char)c);  
                ln++;  
            }   
            fr.close();  
              
            <SPAN style="COLOR: #339966">//主要这里的ln的值,当有中文字符时,一个中文字符还是算一个,  
            //但InputStream时就一个中文就两个,由此可以看出Reader和Input的区别</SPAN>  
            System.out.println("共有:"+ln+"个字符");  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        }catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
 


import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
*
* @author ec06cumt
*
*/
public class TestFileReader {

/**
* @param args
*/
public static void main(String[] args) {
FileReader fr=null;
int c=0;
int ln=0;
try {
fr=new FileReader("D:/a.txt");
while((c=fr.read())!=-1){
System.out.println((char)c);
ln++;
}
fr.close();

//主要这里的ln的值,当有中文字符时,一个中文字符还是算一个,
//但InputStream时就一个中文就两个,由此可以看出Reader和Input的区别
System.out.println("共有:"+ln+"个字符");
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}

}




例三:BufferedReader与BufferWriter的应用:



Java代码
import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.FileReader;  
import java.io.FileWriter;  
import java.io.IOException;  
 
<SPAN style="COLOR: #339966">/** 
* BufferReader和BufferWriter的应用示例 
* @author ec06cumt  

*/</SPAN>  
public class TestBufferedReader {  
 
    <SPAN style="COLOR: #339966">/** 
     * @param args 
     */</SPAN>  
    public static void main(String[] args) {  
        try {  
            <SPAN style="COLOR: #339966">//BuffererReader等就像在原来的字节流的基础上套一个更大的水管,  
            //让出水量更大读取的速度更快。</SPAN>  
            BufferedWriter bw=new BufferedWriter(new FileWriter("D:/aa.txt"));  
            BufferedReader br=new BufferedReader(new FileReader("D://aa.txt"));  
            String s=null;  
            for(int i=0;i<=100;i++){  
                s=String.valueOf(10+(long)(Math.random()*30));  
                bw.write(s);  
                bw.newLine(); <SPAN style="COLOR: #339966">//创建一个换行的标记</SPAN>  
                  
            }  
            bw.flush();     <SPAN style="COLOR: #339966"> //刷新缓冲区域。</SPAN>  
            while((s=br.readLine())!=null){   <SPAN style="COLOR: #339966">//readLine 就是水管的一个应用吧</SPAN>  
                System.out.println(s);  
            }  
            bw.close();  
            br.close();  
        } catch (IOException e) {  
            System.out.println("写入错误");  
        }  
    }  
 


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
* BufferReader和BufferWriter的应用示例
* @author ec06cumt
*
*/
public class TestBufferedReader {

/**
* @param args
*/
public static void main(String[] args) {
try {
//BuffererReader等就像在原来的字节流的基础上套一个更大的水管,
//让出水量更大读取的速度更快。
BufferedWriter bw=new BufferedWriter(new FileWriter("D:/aa.txt"));
BufferedReader br=new BufferedReader(new FileReader("D://aa.txt"));
String s=null;
for(int i=0;i<=100;i++){
s=String.valueOf(10+(long)(Math.random()*30));
bw.write(s);
bw.newLine(); //创建一个换行的标记

}
bw.flush();      //刷新缓冲区域。
while((s=br.readLine())!=null){   //readLine 就是水管的一个应用吧
System.out.println(s);
}
bw.close();
br.close();
} catch (IOException e) {
System.out.println("写入错误");
}
}

}


例四:DataStream的应用:

Java代码
import java.io.ByteArrayInputStream;  
import java.io.ByteArrayOutputStream;  
import java.io.DataInputStream;  
import java.io.DataOutputStream;  
import java.io.IOException;  
 
<SPAN style="COLOR: #339966">/** 
*  
* @author ec06cumt 

*/</SPAN>  
public class TestDataStream {  
 
    <SPAN style="COLOR: #339966">/** 
     * @param args 
     */</SPAN>  
    public static void main(String[] args) {  
        ByteArrayOutputStream bos=new ByteArrayOutputStream();  
        DataOutputStream dos=new DataOutputStream(bos);  
        try {  
<SPAN style="COLOR: #339966">//         dos.writeFloat((float) Math.random());  
//          dos.writeLong((long) Math.random());  
//          dos.writeDouble((double) Math.random());  
//          dos.writeChar((char) Math.random());</SPAN>  
              
            dos.writeShort((short) Math.random());  
            dos.writeBoolean(true);  
            //注意ByteArrayInputStream的构造方法是参数要是一个数组  
            ByteArrayInputStream bais=new ByteArrayInputStream(bos.toByteArray());  
              
            DataInputStream dis=new DataInputStream(bais);  
            System.out.println(dis.available());  
            //System.out.println(dis.readDouble());  
<SPAN style="COLOR: #339966">//         System.out.println(dis.readInt());  
//          System.out.println(dis.readFloat());  
//          System.out.println(dis.readDouble());  
//          System.out.println(dis.readChar());</SPAN>  
            System.out.println(dis.readShort());  
              
            System.out.println(dis.readBoolean());  
            bos.close();  
            bais.close();  
              
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
 


import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

/**
*
* @author ec06cumt
*
*/
public class TestDataStream {

/**
* @param args
*/
public static void main(String[] args) {
ByteArrayOutputStream bos=new ByteArrayOutputStream();
DataOutputStream dos=new DataOutputStream(bos);
try {
// dos.writeFloat((float) Math.random());
// dos.writeLong((long) Math.random());
// dos.writeDouble((double) Math.random());
// dos.writeChar((char) Math.random());

dos.writeShort((short) Math.random());
dos.writeBoolean(true);
//注意ByteArrayInputStream的构造方法是参数要是一个数组
ByteArrayInputStream bais=new ByteArrayInputStream(bos.toByteArray());

DataInputStream dis=new DataInputStream(bais);
System.out.println(dis.available());
//System.out.println(dis.readDouble());
// System.out.println(dis.readInt());
// System.out.println(dis.readFloat());
// System.out.println(dis.readDouble());
// System.out.println(dis.readChar());
System.out.println(dis.readShort());

System.out.println(dis.readBoolean());
bos.close();
bais.close();

} catch (IOException e) {
e.printStackTrace();
}
}

}


例五:ObjectStream的应用

Java代码
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.ObjectInputStream;  
import java.io.ObjectOutputStream;  
import java.io.Serializable;  
 
<SPAN style="COLOR: #339966">/** 
* 对象的写入和读取 
* @author ec06cumt 

*/</SPAN>  
public class TestObjectStream {  
 
    <SPAN style="COLOR: #339966">/** 
     * @param args 
     */</SPAN>  
    public static void main(String[] args) {  
          
        T t=new T();  
        t.k=10;  
          
        try {  
            FileOutputStream fos=new FileOutputStream("D:/testObjectIo.bak");  
            ObjectOutputStream oos=new ObjectOutputStream(fos);  
            oos.writeObject(t);  
            oos.flush();  
            oos.close();  
              
            FileInputStream fis=new FileInputStream("D:/testObjectIo.bak");  
            ObjectInputStream bis=new ObjectInputStream(fis);  
            T tReader= (T) bis.readObject();  
            System.out.println(tReader.i + " " +tReader.j + " "+tReader.d + " " + tReader.k);  
              
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        }catch(IOException e1){  
            e1.printStackTrace();  
        }catch(ClassNotFoundException e2){  
            e2.printStackTrace();  
        }  
    }  
      
}  
 
class T implements Serializable{  
    int i=2;  
    int j=4;  
    double d=2.5;  
    transient int k=15;  
//   int k=15;  


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
* 对象的写入和读取
* @author ec06cumt
*
*/
public class TestObjectStream {

/**
* @param args
*/
public static void main(String[] args) {

T t=new T();
t.k=10;

try {
FileOutputStream fos=new FileOutputStream("D:/testObjectIo.bak");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(t);
oos.flush();
oos.close();

FileInputStream fis=new FileInputStream("D:/testObjectIo.bak");
ObjectInputStream bis=new ObjectInputStream(fis);
T tReader= (T) bis.readObject();
System.out.println(tReader.i + " " +tReader.j + " "+tReader.d + " " + tReader.k);

} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e1){
e1.printStackTrace();
}catch(ClassNotFoundException e2){
e2.printStackTrace();
}
}

}

class T implements Serializable{
int i=2;
int j=4;
double d=2.5;
transient int k=15;
// int k=15;
}





例六:文件的目录复制





Java代码
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
 
 
public class JavaIoCopyFile {  
 
    <SPAN style="COLOR: #339966">/** 
     * Author:liugao ec06-2 cumt 
     * @param args 
     */</SPAN>  
    public static void main(String[] args) {  
          
        File sourceFile=new File("D:/test");  
        File targetFile=new File("F:/jstl");  
        copy(sourceFile,targetFile);  
          
    }  
 
    private static void copy(File sourceFile, File targetFile) {  
        File tarpath=new File(targetFile,sourceFile.getName());  
        if(sourceFile.isDirectory()){  
            tarpath.mkdir();  
            File[] dir=sourceFile.listFiles();  
            for(int i=0;i<dir.length;i++){  
                copy(dir[i],tarpath);  
            }  
        }else{  
            try {  
                InputStream is=new FileInputStream(sourceFile);  
                OutputStream os=new FileOutputStream(tarpath);  
                  
                byte[] buf=new byte[1024];  
                int len=0;  
                while((len= is.read(buf))!=-1){  
                    os.write(buf);  
                }  
                System.out.println("复制完成");  
                is.close();  
                os.close();  
                  
            } catch (FileNotFoundException e) {  
                e.printStackTrace();  
            }catch(IOException e1){  
                e1.printStackTrace();  
            }  
        }  
    }  
      
      
 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics