Javaファイルストリーム変換大全

10661 ワード

一、概念Javaでは、ファイルの入出力はストリーム(Stream)によって実現される.コンピュータのメモリの一部の領域であってもよいし、ディスクファイルであってもよいし、インターネット上のURLであってもよいストリーム.ストリームの場合、データがどのように伝送されるかに関心を持つ必要はありません.ソースにデータを入力し、宛先からデータを取得するだけです.ストリームは、データを処理する単位でバイトストリームと文字ストリームに分けることができます.バイトストリームの処理単位はバイトであり、通常、音楽、ピクチャファイルなどのバイナリファイルを処理するために用いられる.文字ストリームの処理単位は文字であり、JavaはUnicode符号化を採用し、Java文字ストリームはUnicode文字を処理するため、漢字の操作、国際化などの面で文字ストリームが優位である.二、読み書きストリームはパイプで、パイプの中にデータを書く出力ストリーム:writeはパイプの中からデータを読み、入力ストリーム:readストリームの分類:ストリームで、異なる次元によって異なる分類があり、ストリームの中からデータを読むたびに単位が異なり、バイトストリームの文字ストリームに分けられる.ストリーム-対応操作の役割(IOデバイスか、他のストリームか)によって、ファイル、ネットワーク、ディスクなどの特定のIOデバイスに直接読み書きができるかどうか、これらと直接読み書きができるものをノードストリームと呼び、ノードストリームをさらにカプセル化したストリームに対して、カプセル化されたストリームによって読み書き機能を実現するかどうか、処理ストリームは高度なストリームとも呼ばれる.三、ストリームの特徴1、ストリームと配列が異なり、インデックスでデータを読み書きできない.ストリームでは、RandomAccessFileを使用してファイルを処理しない限り、読み取りデータを配列のように前後に移動することはできません.2、ストリームはただ1つの連続したデータストリームにすぎない.ストリーム内のデータは順次アクセスできるだけです.ストリームの最後に達すると、-1が返されます.3、InputStreamのread()メソッドは1バイトサイズを返し、戻り値の範囲は0から255です.4、Readerのread()メソッドは1つの文字を返し、テキストの符号化に基づいて1つ以上のバイトを一度に読み出し、戻り値の範囲は0から65535の間である.5、read(byte[])は、所与のバイト配列容量と同じ大きさのバイト数の読み出しを試み、戻り値intは読み出したバイト数を表す.InputStream内の読み取り可能なデータがバイト配列を満たすのに十分でない場合、配列の残りの部分には、今回の読み取り前のデータが含まれます.実際にバイト配列に書き込まれたデータがどれくらいあるかを確認してください.6、read(byte,int offset,int length)も同様にバイト配列にデータを読み出すが、この方法は配列のoffset位置から始まり、lengthバイトを配列に書き込むことができる.同様に、read(byte,int offset,int length)メソッドは、バイト配列に書き込まれたバイト数を示すint変数を返します.したがって、データを読み出す前に、前回呼び出したread(byte,int offset,int length)の戻り値を確認してください.
import java.io.*;
 
/**
 * Created by Briario on 2019/3/27 20:15
 */
public class FileStreamOperate {
 
    public static final String READ_UTF8_FILE_PATH = "D:\\input-utf8.txt";
    public static final String READ_UNICODE_FILE_PATH = "D:\\input-unicode.txt";
    public static final String WRITE_BYTES_FILE_PATH = "D:\\output-bytes.txt";
    public static final String WRITE_CHARS_FILE_PATH = "D:\\output-char.txt";
 
 
    /**
     *               
     *
     * Step 1.      ,      
     * Step 2.             
     * Step 3.             
     * Step 4.          
     *
     * @return
     */
    public void readFileByFileInputStream() {
        System.out.println("=== readFileByFileInputStream Start ===");
        //       
        File inputFile = new File(READ_UTF8_FILE_PATH);
        //       
        InputStream inputStream = null;
        try {
            //        
            inputStream = new FileInputStream(inputFile);
            //    1KB     
            byte[] buffer = new byte[100];
            //         
            int readLength;
            //        buffer   
            while ((readLength = inputStream.read(buffer)) != -1) {
                // UTF-8     ,     3   
                System.out.println("    " + readLength + "        :" + new String(buffer));
            }
        } catch (FileNotFoundException e) {
            //           
            e.printStackTrace();
        } catch (IOException e) {
            //      ,         
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                try {
                    //      ,        
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println("=== readFileByFileInputStream End ===");
    }
 
    /**
     *               
     *
     * Step 1.      ,      
     * Step 2.             
     * Step 3.             
     * Step 4.            
     *
     * @return
     */
    public void readFileByFileReader(){
        System.out.println("=== readFileByFileReader Start ===");
        //           
        File file = new File(READ_UTF8_FILE_PATH);
        //         
        Reader fileReader = null;
        //               
        char[] charArray = new char[100];
        //        
        char once;
        try {
            fileReader = new FileReader(file);
            //               
            fileReader.read(charArray);
            System.out.println(charArray);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileReader != null) {
                try {
                    //      ,        
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println("=== readFileByFileReader End ===");
    }
 
    /**
     *                
     *
     * Step 1.      ,      
     * Step 2.              
     * Step 3.        ,       
     * Step 4.            
     */
    public void writeFileByFileOutputStream() {
        System.out.println("=== writeFileByFileOutputStream Start ===");
        //       
        File file = new File(WRITE_BYTES_FILE_PATH);
        //         
        OutputStream outputStream = null;
        //     
        String outInfo = "    ";
        //       
        byte[] byteArray = outInfo.getBytes();
        try {
            //        
            outputStream = new FileOutputStream(file);
            outputStream.write(byteArray);
            System.out.println("           :"+outInfo);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (outputStream != null) {
                try {
                    //       ,     
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println("=== writeFileByFileOutputStream End ===");
    }
 
    /**
     *                
     *
     * Step 1.      ,      
     * Step 2.              
     * Step 3.        ,       
     * Step 4.            
     */
    public void writeFileByFileWriter(){
        System.out.println("=== writeFileByFileWriter Start ===");
        //       
        File file = new File(WRITE_CHARS_FILE_PATH);
        //         
        Writer fileWriter = null;
        String strInfo = "      ";
        try {
            //        
            fileWriter = new FileWriter(file);
            //     
            fileWriter.write(strInfo);
            System.out.println("           :"+strInfo);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fileWriter != null){
                try {
                    //       ,     
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println("=== writeFileByFileWriter End ===");
    }
 
    /**
     *         
     */
    public void randomAccessFile(){
        System.out.println("=== randomAccessFile Start ===");
        File file = new File(READ_UTF8_FILE_PATH);
        try {
            RandomAccessFile randomAccessFile = new RandomAccessFile(file,"r");
            //            
            System.out.println("file now pointer is "+randomAccessFile.getFilePointer());
            //             (    )
            randomAccessFile.seek(3);
            //     ,        ,
            randomAccessFile.skipBytes(3);
            System.out.println("file now pointer is "+randomAccessFile.getFilePointer());
            //     
            byte[] buffer = new byte[17];
            // off     buffer        
            randomAccessFile.read(buffer,0,buffer.length);
            System.out.println(new String(buffer));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("=== randomAccessFile End ===");
    }
 
    /**
     *                       
     *
     * Step 1.      ,       
     * Step 2.      ,        
     * Step 3.                
     * Step 4.                  
     * Step 5.            
     */
    public void copyFile() {
        System.out.println("=== copyFile Start ===");
        //       
        File inFile = new File(READ_UTF8_FILE_PATH);
        //       
        File outFile = new File(WRITE_BYTES_FILE_PATH);
        //       
        InputStream inputStream = null;
        //       
        OutputStream outputStream = null;
        try {
            //           ,            
            inputStream = new FileInputStream(inFile);
            //           ,            
            outputStream = new FileOutputStream(outFile);
            while (true) {
                //        
                int temp = inputStream.read();
                //     
                if (temp == -1) {
                    break;
                }
                //            
                outputStream.write(temp);
            }
            System.out.println("        ");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                try {
                    //         ,         
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (outputStream != null) {
                        try {
                            outputStream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
        System.out.println("=== copyFile End ===");
    }
 
    public static void main(String[] args) {
        FileStreamOperate fileStreamOperate = new FileStreamOperate();
        //          ,        
        fileStreamOperate.readFileByFileInputStream();
        //       ,java Unicode      (        )    
        fileStreamOperate.readFileByFileReader();
        //                
        fileStreamOperate.randomAccessFile();
        //               
        fileStreamOperate.writeFileByFileOutputStream();
        //               
        fileStreamOperate.writeFileByFileWriter();
        //     
        fileStreamOperate.copyFile();
    }
}