JavaIOまとめノート基本バイト文字入出力ストリームとファイルコピー

8388 ワード

個人ブログ、個人、gitHubホームページ
一、IOシステム
1.ストリームは主に二つの種類に分けられる:バイトストリーム文字ストリーム
2.ハードディスク上のファイルは、すべてバイナリバイト形式で格納されているので、どんなファイルでも読み書き時にバイトストリームを使うべきです
3.javaの初期バージョンでは、確かにバイトストリームのみで、文字ストリームはありません.
4.数字やアルファベットが1バイト、漢字が2バイト、バイトストリームが1回に1バイト読み書きすると、中国語の文字化けしが発生しやすい
5.文字ストリームはテキストクラスのファイルの読み書きに特化しており、txt doc
6.バイトストリームは非テキストクラスのファイルを読み書きするのに適しており、mp 3 mp 4 avi rm rmvb mkv jpg png bmp
二、常用類(パイプ類)
1.      FileInputStream   FileOutputStream
2.      FileReader        FileWriter

三、バイトストリームの出力ストリームFileOutputStream
1.メモリのデータをハードディスクのファイルに出力する役割
2.構造方法
FileOutputStream(File file)            
FileOutputStream(String name)          

3.機能方法
public void write(int b)        ASCII     ,      
public void write(byte[] b)   String   getBytes         
public void write(byte[] b, int off, int len)

4.バイトストリームを使用して改行をどのように出力しますか?システムを使用できます.getProperty(「line.separator」)を使用して、現在のシステムの改行記号を取得します.
5.追加と上書き方法デフォルトは上書きです
  • コード例:
  • 
        public static void writeFile() throws IOException {
            //  FileOutputStream 
            //1.   
            FileOutputStream fos1 = new FileOutputStream(new File("A03_FileOutputStreamTest.txt"));
            //FileOutputStream   fos2=new FileOutputStream("A03_FileOutputStreamTest.txt");
    
            //2.   
            fos1.write(97);
            fos1.write(98);
            fos1.write(99);
            fos1.write(100);
    
            byte[] t = {97, 98, 'c'};
            fos1.write(t);
            fos1.write("hello".getBytes());
            fos1.write("world".getBytes());
            fos1.write("\r
    ".getBytes()); fos1.write(t, 0, 2); fos1.close(); }

    四、バイトストリームの入力ストリームFileInputStreamクラス
    1.ハードディスクのデータをメモリに入力(読み出し)する
    2.構造方法
    FileInputStream(File file) 
    FileInputStream(String name) 
    

    3.機能方法
    public int read()              ,        ,  -1
    public int read(byte[] b)                  ,                 ,        -1             
    new String(byte[] b)
    
  • コード例:
  • 
        public static void readFile() throws IOException {
            //1.   
            File f = new File("src\\com\\afinalstone\\file\\IOUtil.java");
            InputStream fis = new FileInputStream(f);
            //FileInputStream fis=new FileInputStream("src\com\afinalstone\file\IOUtil.java");
    
            //2.    
    //      public int read()              ,        ,  -1
            int res;
            do {
                res = fis.read();
                System.out.println((char) res);
            } while (res != -1);
            //3.  
            fis.close();
        }
    
        public static void readFileByBufferByte() throws IOException {
            //1.   
            File f = new File("src\\com\\afinalstone\\file\\IOUtil.java");
            InputStream fis = new FileInputStream(f);
            //FileInputStream fis=new FileInputStream("c:\\test\\hello.txt");
    
    //      public int read(byte[] b)                  ,             
            //2.         
            System.out.println(f.length());
            byte[] t = new byte[(int) f.length()];
            //3.  
            fis.read(t);
            System.out.println(new String(t).trim());
            //4.  
            fis.close();
        }
    

    五、ファイルのコピー
    1.先に読み込んだターゲットファイルのデータをコピーし、次に別のファイルに書き込む
    2.コピーの仕方
    a.               ,      
    
    b.                    ,   ,     
    
  • コード例:
  • 
        public static void copy01_FileIOStream() throws IOException {
            //a.               ,      
            //1.   
            File f = new File(fileName_source);
            FileInputStream fis = new FileInputStream(f);
    
            //2.   
            byte[] t = new byte[(int) f.length()];
    
            //3.  
            fis.read(t);
    
            //4.  
            fis.close();
    
            //1.   
            FileOutputStream fos = new FileOutputStream(fileName_destination);
            //2.   
            fos.write(t);
            //3.  
            fos.close();
        }
    
        public static void copy01_FileIOStreamBufferByte() throws IOException {
            //b.                    ,   
    
            //1.     
            FileInputStream  fis=new FileInputStream(fileName_source);
            FileOutputStream fos=new FileOutputStream(fileName_destination);
    
            //2.   
    //        byte[] t=new byte[1*1024*1024];    //1M
            byte[] t=new byte[8*1024];    //8k
    
            //3.        1M 1M
            while(true)
            {
                int res=fis.read(t);  // 
                if(res==-1)
                    break;
                fos.write(t,0,res);   // (          )
            }
    
            //4.  
            fis.close();
            fos.close();
        }  
        
    

    六、文字ストリームの出力ストリームFileWriterクラス
    1.ハードディスク(HDD)のあるファイルにメモリのデータを出力(書き込み)するテキストクラスにのみ適したファイル
    2.構造方法
    public FileWriter(File file)
    public FileWriter(String fileName)
    public FileWriter(File file,boolean append)
    public FileWriter(String fileName,boolean append)
    

    3.機能方法
    public void write(String str)
    public void write(char[] cbuf)
    public void write(char[] b,int off, int len)
    
  • コード例:
  • 
        public static void writeFile() throws IOException {
    
            //  FileWriter 
    
            //1.   
            FileWriter fw=new FileWriter(new File("F03_FileReaderAndWriter.txt"));
            //FileWriter fw=new FileWriter("c:\\test\\hello.txt");
    
            //2.   
            fw.write("hello\r
    "); char[] c={'a','b','c',100}; fw.write(c); fw.write("\r
    "); fw.write(c, 0, 2); //3. fw.close(); }

    七、文字ストリームの入力ストリームFileReaderクラス
    1.ハードディスクのファイルのデータをメモリに入力(読み込み)
    2.構造方法
    public FileReader(File file)
    public FileReader(String fileName)
    

    3.機能方法
    public int read()                        ASCII ,      -1
    public int read(char[] cbuf)                 ,      -1
    
  • コード例:
  •     public static void readFile() throws IOException {
    
            //  FileReader 
    
            //1.   
            File f=new File("fileName");
            FileReader fr=new FileReader(f);
            //FileReader fr=new FileReader("src\com\afinalstone\file\F03_FileReaderAndWriter.java");
    
            //2.   
            int res;
            do {
                res=fr.read();
                System.out.println((char)res);
            } while (res!=-1);
    
            //3.  
            fr.close();
    
        }
    
    
        public static void readFileByBufferChar() throws IOException {
    
            //  FileReader 
    
            //1.   
            File f=new File(fileName);
            FileReader fr=new FileReader(f);
            //FileReader fr=new FileReader("c:\\test\\hello.txt");
    
            //2.   
            System.out.println(f.length());
            char[] c=new char[(int)f.length()];
    
            //3.  
            fr.read(c);
            System.out.println(new String(c).trim());
    
            //4.  
            fr.close();
    
        }
    

    八、文字ストリームのバッファ
    1.文字ストリームにバッファがあり、バイトストリームにバッファがない
    2.バッファ:メモリ内の領域です
    3.作用:効率を高め、ハードディスクに対する頻繁な読み書き保護ハードディスクを減少する
    4.文字ストリームバッファのデフォルトサイズは8 K
    5.パイプを閉じると、バッファ内のデータをハードディスク(HDD)に強制的に書き込みます.
    6.public void flush()/クリアバッファ、強制書き込み
    九、文字ストリームでファイルコピーを実現する
    レプリケーションの方法
    a.               ,      
    
    b.                    ,   
    
    
       public static void copy02_FileReaderWriter() throws IOException {
    
            //1.     
            FileReader fr=new FileReader(fileName_source);
            FileWriter fw=new FileWriter(fileName_destination);
    
            //3.            
            while(true)
            {
                int res=fr.read();
                if(res==-1)
                    break;
                fw.write(res);
            }
    
            //4.  
            fr.close();
            fw.close();
        }
    
        public static void copy02_FileReaderWriterBufferChar() throws IOException {
            //                      
    
            //1.     
            FileReader fr=new FileReader(fileName_source);
            FileWriter fw=new FileWriter(fileName_destination);
    
            //2.   
            char[] c=new char[1*1024];   //1K
    
            //3.            
            while(true)
            {
                int res=fr.read(c);
                if(res==-1)
                    break;
                fw.write(c,0,res);
            }
    
            //4.  
            fr.close();
            fw.close();
        }
    
    

    プロジェクトアドレス:転送ゲート