自己のJava -I / Oバイトストリーム

JavaバイトストリームのInputStreamのOutputStream

バイトの入力ストリーム入力ストリーム
のバイトのOutputStream出力ストリームを
バイト単位でデータを読み書きします

ステップ1:ASCIIコード

コンピュータに保存されているすべてのデータは、デジタル形式で保存されます。だから、文字はデジタルストレージに変換することができるようにする必要があります
実施例65に対応するデジタルは、Aの異なる番号が、対応する図97の文字や記号に対応し、符号表の一部です。
これは、ASCIIコード表です。それだけ含まれているように簡単な英語の文字、記号、数字、およびを。それは含まれていません中国語、ドイツ語、ロシア語及びその他の複合体を。

例は、列挙された、可視及び進と16進数に対応するASCIIコードに記載されている目に見えない書き込み
ここに画像を挿入説明
ステップ2:ファイルのバイトストリームの内容を読み出します

入力ストリームは、バイトの入力ストリームだけでなく、抽象クラス、メソッドの宣言だけで、方法の特定の実装を提供しません。
FileInputStreamのは、サンプルファイルの読み込みをFileInputStreamのためのInputStreamのサブクラスであります

package stream;
  
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
  
public class TestStream {
  
    public static void main(String[] args) {
        try {
            //准备文件lol.txt其中的内容是AB,对应的ASCII分别是65 66
            File f =new File("d:/lol.txt");
            //创建基于文件的输入流
            FileInputStream fis =new FileInputStream(f);
            //创建字节数组,其长度就是文件的长度
            byte[] all =new byte[(int) f.length()];
            //以字节流的形式读取文件所有内容
            fis.read(all);
            for (byte b : all) {
                //打印出来是65 66
                System.out.println(b);
            }
             
            //每次使用完流,都应该进行关闭
            fis.close();
              
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          
    }
}

ステップ3:バイトのストリームでは、ファイルにデータを書き込みます

OutputStreamは、バイトの出力ストリームであるが、抽象クラスは、特定の実装方法を提供していないメソッドの宣言を提供します。
FileOutputStreamは、たとえばたFileOutputStreamのために、ファイルにデータを書き込むためのOutputStreamのサブクラスであります

注:ファイルdは場合:/lol2.txtが存在しない、自動的にファイルが作成される処理を記述します。
ファイルdなら:/xyz/lol2.txt、およびディレクトリxyzは存在しない、それは例外がスローされます
バイトストリームの形式でファイルにデータを書き込みます

package stream;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class TestStream {
 
    public static void main(String[] args) {
        try {
            // 准备文件lol2.txt其中的内容是空的
            File f = new File("d:/lol2.txt");
            // 准备长度是2的字节数组,用88,89初始化,其对应的字符分别是X,Y
            byte data[] = { 88, 89 };
 
            // 创建基于文件的输出流
            FileOutputStream fos = new FileOutputStream(f);
            // 把数据写入到输出流
            fos.write(data);
            // 关闭输出流
            fos.close();
             
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
    }
}

練習分割ファイル

複数のサブファイルに分割し、ユニットによれば、100Kよりも大きいファイル、および100Kを見つけ、そしてエンドとしてファイル名に番号。
このようなファイルeclipse.exeを通り、サイズは309kです。
分割後、なる
eclipse.exeを0
eclipse.exeを-1-。
eclipse.exeを2-
eclipse.exeを3-。
ここに画像を挿入説明
回答

package stream;
  
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
  
public class TestStream {
  
    public static void main(String[] args) {
        int eachSize = 100 * 1024; // 100k
        File srcFile = new File("d:/eclipse.exe");
        splitFile(srcFile, eachSize);
    }
  
    /**
     * 拆分的思路,先把源文件的所有内容读取到内存中,然后从内存中挨个分到子文件里
     * @param srcFile 要拆分的源文件
     * @param eachSize 按照这个大小,拆分
     */
    private static void splitFile(File srcFile, int eachSize) {
  
        if (0 == srcFile.length())
            throw new RuntimeException("文件长度为0,不可拆分");
  
        byte[] fileContent = new byte[(int) srcFile.length()];
        // 先把文件读取到数组中
        try {
            FileInputStream fis = new FileInputStream(srcFile);
            fis.read(fileContent);
            fis.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // 计算需要被划分成多少份子文件
        int fileNumber;
        // 文件是否能被整除得到的子文件个数是不一样的
        // (假设文件长度是25,每份的大小是5,那么就应该是5个)
        // (假设文件长度是26,每份的大小是5,那么就应该是6个)
        if (0 == fileContent.length % eachSize)
            fileNumber = (int) (fileContent.length / eachSize);
        else
            fileNumber = (int) (fileContent.length / eachSize) + 1;
  
        for (int i = 0; i < fileNumber; i++) {
            String eachFileName = srcFile.getName() + "-" + i;
            File eachFile = new File(srcFile.getParent(), eachFileName);
            byte[] eachContent;
  
            // 从源文件的内容里,复制部分数据到子文件
            // 除开最后一个文件,其他文件大小都是100k
            // 最后一个文件的大小是剩余的
            if (i != fileNumber - 1) // 不是最后一个
                eachContent = Arrays.copyOfRange(fileContent, eachSize * i, eachSize * (i + 1));
            else // 最后一个
                eachContent = Arrays.copyOfRange(fileContent, eachSize * i, fileContent.length);
  
            try {
                // 写出去
                FileOutputStream fos = new FileOutputStream(eachFile);
                fos.write(eachContent);
                // 记得关闭
                fos.close();
                System.out.printf("输出子文件%s,其大小是 %d字节%n", eachFile.getAbsoluteFile(), eachFile.length());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

おすすめ

転載: www.cnblogs.com/jeddzd/p/11730133.html