バイナリファイルの操作 – FileInputStream/FileOutputStreamクラス
FileInputStream(String name)
FileOutputStream(String name [,boolean append])
name:ファイルのパス append:追記モードで開くか
画像などのバイナリファイルを読み書きするには、FileInputStream/FileOutputStreamクラスを利用します。FileInputStream/FileOutputStreamクラスの主なメソッドは、以下の通りです。
| FileInputStream/FileOutputStreamクラスの主なメソッド | ||
|---|---|---|
| クラス | メソッド | 概要 |
| FileInputStream | int read([byte b [,int off, int len]]) | 入力ストリームからバイト配列bに読み込み (offは開始位置、lenは読み込み長) |
| long skip(long n) | 読み込みをnバイトだけスキップ | |
| void close() | ストリームを閉じる | |
| FileOutputStream | void write(byte b [,int off, int len] | バイト配列bの内容を出力ストリームに書き出し (offは開始位置、lenは読み込み長) |
| void close() | 読み込みをnバイトだけスキップ | |
| void close() | ストリームを閉じる | |
たとえば以下はsample.jpgを読み込み、その内容をそのままsample2.jpgに書きだす例です。
- package com.example.mynavi.stream;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- public class StreamBinary {
- public static void main(String[] args) {
- try (var in = new FileInputStream("C:/data/sample.jpg");
- var out = new FileOutputStream("C:/data/sample2.jpg")) {
- int data;
-
while ((data = in.read()) != -1) { - out.write((byte) data);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
FileInputStream/FileOutputStreamコンストラクターで操作対象のパスを指定することで、それぞれファイルを読み取り/書き込み専用で開けます。
ファイルからバイトデータを読み込むにはreadメソッドを利用します。readメソッドは、読み込みに成功した場合はその値を、読み込むべきデータがなかった場合には-1を返します。上では、その性質を利用して、readメソッドが-1を返すまでwhileループを繰り返すことで、ファイルの内容をすべて読み込めます。
バイトデータは、writeメソッドを利用することで、対象のファイルに書き込みます。
try-with-resource構文
ファイルなど共有のリソースを利用する際には、tryブロック直後のカッコで宣言します。これによって、リソースはtryブロックを抜けるタイミングで自動的に解放されますので、いわゆる「ファイルの閉じ忘れ」を防げます。この構文は、Java 7で新たに追加された構文で、try-with-resources構文と呼ばれます。
- ストリーム_目次
- ストリーム
- FileInputStream/FileOutputStreamクラス
- InputStreamReader/OutputStreamWriterクラス
- BufferedReader/BufferedWriterクラス
- ObjectInputStream/ObjectOutputStreamクラス
- Fileクラス
監修