IOストリーム - コピーするバイトの入出力ストリーム、ファイル

私流


  • I:入力 - 入力(読み取り)、例えば:ハードディスク・メモリの内容を読むこと
  • O:出力 - 出力(書き込み)例:メモリ内のものを入れて保存するために、ディスクに書き込まれます
  • フロー:数値(テキスト/バイト)の文字、一般的に1 = 2バイト、1バイト= 8ビット

バイトストリームは、任意のファイルを読むために:音楽/写真/ ...、

  • 例外ファイルが存在しない、ここでの統一は、JVMプロセスを投げるスロー例外もキャッチを試みることができます

バイトの出力ストリーム - すべてのバイト出力の親


  • java.io.OutputStream -バイトトップの出力ストリーム抽象親クラスには、以下の抽象メソッドです

    1. ボイドクローズ()は、
      この出力ストリーム解放このストリームに関連するすべてのシステムリソースをクローズ。

    2. 無効フラッシュは()
      この出力ストリームをフラッシュし、バッファ出力バイトを強制的に書き込みます。

    3. ボイドライト(バイト[] b)に
      指定されたバイト配列からこの出力ストリームに書き込まれてb.lengthバイト。

    4. ボイドライト(バイト[] B、オフINT、INT LEN)
      この出力ストリームに書き込まオフオフセットlenバイトから始まる指定されたバイト配列。

    5. 抽象ボイド書き込み(int型b)は
      、この出力ストリームに指定されたバイト。

java.io.FileOutpuStreamはOutputStreamを拡張します


  • たFileOutputStream:ファイルのバイト出力ストリーム
    1. 役割:ファイルを書き込む事のメモリ

    2. コンストラクタ:

      FileOutputStream(文字列名)は
      、出力ファイルストリームの指定した名前のファイルへの書き込みデータを作成します。

    FileOutputStream(ファイルファイル)
    出力ストリームで指定されたFileオブジェクトによって表されるデータファイルを記述するためのファイルを作成します。

    1. FileOutputStream(ファイルファイル、APPENDをブール値)
      新しいファイルを作成するための追加の書き込みに真書かを追加するアペンドスイッチ、偽

    2. コンストラクタの役割:
      1. FileOutputStreamオブジェクトを作成します。
      2. 空のファイルを作成し、ファイル転送のコンストラクタ/ファイルパスに基づいて、
      3. FileOutputStreamの目的は、良好な文書を作成するために指しています
  • 原則に書き込まれたデータ(メモリ - >ハードドライブ)
    1. Javaプログラム - JVMの仮想マシン - OS - OSは、データを書き込むメソッドを呼び出します - 書かれた文書
  • 使用されるバイトのステップ出力ストリーム
    1. FileOutputStreamオブジェクトを作成し、データの転送先を書きます
    2. FileOutputStreamオブジェクトのメソッド呼び出し、ファイルを書き込むための書き込み方法
    3. 、フローは、リソースを解放するためのメモリを取り上げます
import java.io.FileOutputStream;
import java.io.IOException;
public class IOApi {
    public static void main(String[] args) throws IOException {

        //构造方法中绑定要写入数据的目的地
        FileOutputStream output = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\java_code\\test.txt");

        output.write(65);   //十进制65 -> 二进制100 0001‬
        /*
        任意的文本编辑器,在打开文件时都会查询编码表,把字节表示转换
        字符表示

        若是0-127,则会查询ASCII表
        其他值:查询系统默认表(中文系统查询JDK编码表)
        即:上文写入A

        */

        //一次写多个字节

        output.close();
    }
}

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class IOApi {
    public static void main(String[] args) throws IOException {

        //使用File生成写入数据目的地,相对路径(不使用File也可以)
        FileOutputStream output = new FileOutputStream(new File("b.txt"));

        output.write(49);  //写入三个字节显示为1
        output.write(48);  //写入三个字节显示为0
        output.write(48);  //写入三个字节显示为0

        output.close();
    }
}
  • 連続書き込み複数のバイト、上記の最適化

    1. あなたが最初のバイトは正の整数(0〜127)で記述した場合、ASCIIコード表の表示を問い合わせます
    2. あなたが最初のものは、最初のバイト2番目のバイトは、テキストが表示されます、負の書いた場合は
      、文字を、クエリは既定のコード表である(GBK)
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class IOApi {
    public static void main(String[] args) throws IOException {

        //使用File生成写入数据目的地,相对路径(不使用File也可以)
        FileOutputStream output = new FileOutputStream(new File("b.txt"));

        byte[] bytes ={49,48,48};

        output.write(bytes);  //100

        byte[] bytes1 ={-56,78,48};
        output.write(bytes1);  //100萅0

        //public void write(byte[],int off,int len) :把字节数组的一部分写入到文件中
        //从偏移量off开始输出到此输出流,从指定的字节数组写入len字节

        output.write(bytes,1,2);  //100萅000

        //String,出现乱码,可能是上面字节与下面字符转换的字节配对
        //写在第一行没问题
        output.write("你好呀".getBytes());  //00萅000浣犲ソ鍛€
        
        output.close();
    }
}
  • 追加データと改行
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class IOApi {
    public static void main(String[] args) throws IOException {

        //打开追加写开关,false创建新文件,覆盖源文件。
        FileOutputStream output = new FileOutputStream("b.txt",true);

        //String
        output.write("你好呀".getBytes());

        //Windows: \r\n
        //Linux:/n
        //Mac:/r
        output.write("\n好呀".getBytes());

        output.close();
    }
}

バイトの入力ストリーム - すべての入力バイトのスーパー


  • 方法java.io.InputStreamを、全てのサブクラスの共通部分をオブジェクト延びています。

    1. 抽象int型の読み取りは、()
      入力ストリームからデータの次のバイトを読み込みます。
    2. 読み取りINT(バイト[] b)は
      入力ストリームからバイトの一定数を読み出し、バッファ配列bに格納します。
    3. 読み取りINT(バイト[] B、オフINT、INT LEN)
      入力データのバイトを最大lenストリームは、バイト配列に読み込まれます。

    4. ボイド閉じる()
      この入力ストリームを解放ストリームに関連するすべてのシステムリソースをクローズ。

java.io.FileInputStreamはInputStreamを拡張します


  • 役割:ハードディスクファイルがメモリに読み込ま

  • コンストラクタ:

    1. FileInputStreamを(ファイルファイル)
      ファイル:データソース
    2. FileInputStreamを(のFileDescriptor fdObj)は、
      実際のファイルに既存のファイルシステムへの接続を表すファイル記述子fdObjを使用して、FileInputStreamを作成します。
    3. FileInputStreamを(文字列名)
      名:ファイルパス
    • コンストラクタの役割:

      1. それはFileInputSteamオブジェクトを作成し、
      2. FileInputStreamのコンストラクタは、読取対象物に指定されたファイルになります
  • ファイルを読むために - JVM - - OS - OSは、データを読み出す方法を呼び出すJavaプログラム:データの原則を読みます

  • バイトのステップ入力ストリーム
    1. 読むためにデータソースをバインドするためのFileInputStreamオブジェクトのコンストラクタを作成します。
    2. FileInputStreamのを用いる方法は、ファイルを読んで、読んで
    3. リリースリソース
import java.io.FileInputStream;
import java.io.IOException;

public class IOApi {
   public static void main(String[] args) throws IOException {

       //相对路径获取数据源
       FileInputStream input = new FileInputStream("b.txt");

       //使用read方法读取,一次读取一个字节,会返回一个Int值
       System.out.println(input.read());  //239 你
       //读取的第二个值
       System.out.println(input.read());  //187 好

       //当input.read返回 -1 时代表读取结束,说明读取到了结束标记
       while(input.read() != -1){
           System.out.println(input.read());
       } 
       

       //关闭输入数据流,释放资源
       input.close();
   }
} 
  • バイト数で読み取られたバイトの入力ストリーム

入力ストリームから読み込まれたバイト数、バッファに格納する([] Bバイト)の読み取りint型
配列b。

バイト[] B:一般1024の長さ(1kBの)または1024の整数倍として定義されるクッション、
INT:有効な戻り値はバイト数であります

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;

public class IOApi {
   public static void main(String[] args) throws IOException {

       //相对路径获取数据源
       FileInputStream input = new FileInputStream("b.txt");

       //连续读,给定一个字节数组,中文字符如果设置的数组不足够长,会有乱码
       //byte[] inp = new byte[10];出现中文乱码,读取不完全
       //数组作用:起到缓冲作用
       byte[] inp = new byte[20];
       
       //read(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中,字节数组 b 实际是一个不断重复覆盖的过程
       //input.read(inp)返回的是读取的有效字节的个数
       System.out.println(input.read(inp));  //19
       
       //使用数组工具类转换为码值
       //当数组长度为10时 [-17, -69, -65, -28, -67, -96, -27, -91, -67, -27]
       //当数组长度为20时 [-17, -69, -65, -28, -67, -96, -27, -91, -67, -27, -111, -128, 10, -27, -91, -67, -27, -111, -128, 0]
       System.out.println(Arrays.toString(inp));

       /*
       String类的构造方法转换
       String[byte[] bytes] : 把字节数组转换为字符串
       String(byte[] bytes,int offset,int length)把字符数组的一部分转换为字符串,
       offset:偏移位置,length:转换个数
        */
       
       //出现乱码,是因为给的byte[10]长度不够,换为byte[20]正常
       //长度为10 你好� ;长度为20 显示正常
       System.out.println(new String(inp));

       /*********************************************
       为什么要用偏移量0,因为如果数组过大,容易浪费空间
       所以可以设置长度为input.read(inp)的返回值,也就是19,如下
       System.out.println(new String(inp,0,19));
       *********************************************/

       //关闭输入数据流,释放资源
       input.close();
   }
}

ファイルコピー


  • 原則:読み取り、書き込み、任意のバイトストリームファイルをコピーすることができます
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;

public class IOApi {
    public static void main(String[] args) throws IOException {

        //读,相对路径获取数据源
        FileInputStream input = new FileInputStream("b.txt");
        byte[] inp = new byte[1024];
        //len为读取的有效字节位数
        int len = input.read(inp);

        //写,相对路径给出文件写入抽象位置
        FileOutputStream output = new FileOutputStream("b_copy.txt");
        //给出写入数据,从0开始到有效位置结束
        output.write(inp,0,len);

        

        //优化代码
        FileInputStream inputJpg = new FileInputStream("C:\\Users\\Administrator\\Pictures\\1.jpg");
        FileOutputStream outputJpg = new FileOutputStream("C:\\Users\\Administrator\\Pictures\\1_copy.jpg");
        //注,中文结束位会报错,陷入死循环,可复制图片,图片大,用字节数组处理快
        byte[] bytes= new byte[1024*1024];
        int lenJpg = 0;
        while((lenJpg = inputJpg.read(bytes)) != -1){
            outputJpg.write(bytes,0,lenJpg);
        }

        //先释放写的,写完一定读完了
        outputJpg.close();
        inputJpg.close();
    }
}

おすすめ

転載: www.cnblogs.com/huxiaobai/p/11575442.html