您的位置:首页 > 编程语言 > Java开发

Java IO流相关知识

2017-07-30 21:54 316 查看
一、IO流的分类
字符流
                Reader
                        InputStreamReader(节点流)
                        BufferedReader(处理流)
                Writer
                        OutputStreamWriter(节点流)
                        BufferedWriter(处理流)
                        PrintWriter
字节流
                InputStream
                        FileInputStream(节点流)
                        BufferedInputStream(处理流)
                        ObjectInputStream(处理流)
                        PrintStream
                OutputStream
                        FileOutputStream(节点流)
                        BufferedOutputStream(处理流)
                        ObjectOutputStream(处理流)
 断点处理的流
                RandomAccessfile
                
二、IO流的用法
1、转换流的用法

          FileInputStream
in
= new
FileInputStream(newFile(""));         
           Readerreader
=
new InputStreamReader(in);//字节转字符
           FileOutputStreamout
=
new FileOutputStream(newFile(""));
           Writer
writer =
new OutputStreamWriter(out);//字符转字节

           2、对象序列化,对象需要实现Serializable接口

            FileOutputStreamfileOutputStream
=
new FileOutputStream("C:\\Users\\lx\\Desktop\\Record.txt");
           ObjectOutputStreamobjectOutputStream
=
new ObjectOutputStream(fileOutputStream);
[align=left]           objectOutputStream.writeObject(object);//向指定文件写入对象object[/align]
           objectOutputStream.close();

            FileInputStreamfileInputStream
=
new FileInputStream("C:\\Users\\lx\\Desktop\\Record.txt");
           ObjectInputStreamobjectInputStream
=
new ObjectInputStream(fileInputStream);
           object =  objectInputStream.readObject();//读取得到对象object
            fileInputStream . lose();

        3、断点的运用

public
class Copy
extends Thread{ //可以利用多线程实现拷贝    
[align=left]     longstart;[/align]
[align=left]     longend;[/align]
[align=left]     Filesorce;[/align]
[align=left]     Filetargetdir;[/align]
[align=left]     [/align]
     publicCopy() {       
        }
     publicCopy(longstart,long
end, File
sorce, File
targetdir) {//利用构造方法传递需要拷贝的长度,拷贝开始位置,以及目标文件和源文件
[align=left]           super();[/align]
           this.start=
start;
           this.end=
end;
           this.sorce=
sorce;
           this.targetdir=
targetdir;
[align=left]     }[/align]
[align=left]     @Override[/align]
     publicvoid
run(){         
[align=left]           try{[/align]
                RandomAccessFilesouceRaf

=
new
RandomAccessFile(sorce,"r");
                RandomAccessFiletargetRaf

=
new
RandomAccessFile(newFile(targetdir,sorce.getName()),"rw");
[align=left]                souceRaf.seek(start);[/align]
[align=left]                targetRaf.seek(start);[/align]
[align=left]                [/align]
[align=left]                intlen= 0;[/align]
                byte[]bs
=
new byte[1024];
[align=left]                longseek;[/align]
[align=left]                [/align]
[align=left]                System.out.println(start+"---->"+end+this.getName());[/align]
                while((len=
souceRaf.read(bs))!=-1){
                     targetRaf.write(bs,
0, len);
[align=left]           [/align]
                     seek=
souceRaf.getFilePointer();//获取断点位置
                     if(seek==
end){
[align=left]                           break;[/align]
[align=left]                     }[/align]
[align=left]                }    [/align]
[align=left]                targetRaf.close();[/align]
[align=left]                souceRaf.close();[/align]
[align=left]                [/align]
           }catch
(IOException
e) {
[align=left]                e.printStackTrace();[/align]
[align=left]           } [/align]
[align=left]     }[/align]
}

4、字节流的用法

public class Test_InputStream {//利用字节流获取文本文件内容,但是容易出现问题
/*    
    //可能出现int长度越界
    public static void main(String[] args) throws IOException {
        InputStream inputStream = new FileInputStream(new File("C:\\Users\\lx\\Desktop\\test\\33.txt"));
        byte[] b = new byte[inputStream.available()];    
        inputStream.read(b);
        
        String str = new String(b);
        System.out.println(str);
    
    }
*/
    //可能出现乱码        
    public static void main(String[] args) throws IOException {
        File file = new File("C:\\Users\\lx\\Desktop\\test\\33.txt");
        InputStream inputStream = new FileInputStream(file);
        //统计每次读取的实际长度
        int len = 0;
        //声明每次读取1024个字节
        byte[] b = new byte[2];
        StringBuffer sBuffer = new StringBuffer();        
        while((len=inputStream.read(b))!=-1){
            sBuffer.append(new String(b,0,len));
        }
        System.out.println(sBuffer.toString());
    }
}
//利用字节流拷贝文件
public
void copy(File
sourceFile, File
targetDir) {//
           FileInputStreamfileInputStream
=
null;
           FileOutputStreamfileOutputStream
=
null;
           fileInputStream=
new
FileInputStream(sourceFile);
           FiletargetFile
=
new File(targetDir,sourceFile.getName());
           fileOutputStream=
new
FileOutputStream(targetFile);
           byte[]b
=
new byte[1024];
            intlen
= 0;
            while((len=
fileInputStream.read(b))
!= -1) {
                  fileOutputStream.write(b,
0, len);
             }

}

5、缓存字符流的用法

     publicstatic
void
main(String[] args)
throws
IOException {//缓存字符流实现写入文件
           InputStreamin
= System.in;
           Readerreader
=
new InputStreamReader(in);
           BufferedReaderbr
=
new BufferedReader(reader);
           BufferedWriterbw
=
new BufferedWriter(new
FileWriter(new
File("src/1.txt")));
[align=left]           Strings="";[/align]
           while((s=br.readLine())!=null)
{
[align=left]                bw.write(s);[/align]
[align=left]                bw.newLine();[/align]
                bw.flush();  
       //字符流千万不要忘了flush!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[align=left]           }[/align]
     }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息