JAVA IO-ファイルフロー

10895 ワード

JAVA IO
入力と出力
入力と出力はある媒体に対して,ここではデータのソースを暫定的にデータソースとし,データの流れをターゲットメディアと呼ぶ.一般的なデータ・ソースとターゲット・メディアは、1.ファイル2.パイプ3.ネットワーク接続4.メモリキャッシュ
データの入出力は、データソースからデータを読み出し(入力)し、ターゲットメディアにデータを出力することを理解することができる.通常、1つのメディアの入力は、他のメディアの出力であることが多い.
ながれ
ストリームは連続したデータストリームであり、ストリームからデータを入力してもよいし、ストリームからデータを出力してもよい.ストリームはまた、データソースとターゲットメディアの1つのチャネルとして理解することができ、ストリームは一般的に:1に分けることができる.バイトストリーム(バイト単位で読み書き)2.文字ストリーム(文字単位で読み書き)
一般的なバイトストリームはinputStream/outputStreamで拡張され、文字ストリームは一般的にReader/Writerで拡張されます.バイトストリームと文字ストリームの変換は、inputStreamReader/outputStreamWriterで変換できます.
ストリームの用途によって:1に分けることができる.ファイルアクセス2.ネットワークアクセス3.メモリキャッシュアクセス4.スレッド内部通信(パイプ)5.バッファ6.濾過7.解析8.テキスト9を読み込む.基本タイプデータ10を読み書き.読み書きオブジェクト
ファイルフロー
ファイルは、一般的なデータ・ソースまたはデータを格納するメディアであり、データ・ストリームの流れに応じて適切なファイル・ストリームを選択してデータを操作します.
ファイルを読む
1つのファイルからデータを読み込む場合、ファイルを読み込むデータがバイナリデータまたは文字型データであることに基づいてFileInputStreamまたはFileReaderを選択できます.
    /** * FileInputStream read * * @param file * @return */
    public static String readFileByByte(File file) {
        StringBuilder sb = new StringBuilder();
        try {
            FileInputStream fileInputStream = new FileInputStream(file);
            byte[] buffer = new byte[1024];
            int len = -1;
            while ((len = fileInputStream.read(buffer)) != -1) {
                sb.append(new String(buffer, 0, len));
            }
            fileInputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

    /** * FileReader read * * @param file * @return */
    public static String readFileByChar(File file) {
        StringBuilder sb = new StringBuilder();
        try {
            FileReader fileReader = new FileReader(file);
            int c = -1;
            while ((c = fileReader.read()) != -1) {
                sb.append((char) c);
            }
            fileReader.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

ファイルを書く
1つのファイルからデータを書き込む場合、書き込むデータのバイナリデータまたは文字型データに基づいてFileOutputStreamまたはFileWriterを選択できます.
    /** * FileOutputStream write * * @param file * @param content * @return */
    public static boolean writeFileByByte(File file, String content) {
        if (file == null || !file.exists() || isEmpty(content))
            return false;
        try {
            //Whether or not covered
            FileOutputStream fileOutputStream = new FileOutputStream(file, false);
            fileOutputStream.write(string2ByteArray(content));
            fileOutputStream.close();
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

    public static boolean isEmpty(String content) {
        if (content == null || content.length() == 0)
            return true;
        return false;
    }

    public static byte[] string2ByteArray(String content) {
        byte[] buf = new byte[content.length()];
        char[] chars = content.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            buf[i] = (byte) chars[i];
        }
        return buf;
    }

    /** * FileWriter write * @param file * @param content * @return */
    public static boolean writeFileByChar(File file, String content) {
        if (file == null || !file.exists() || isEmpty(content))
            return false;
        try {
            FileWriter fileWriter = new FileWriter(file, false);
            fileWriter.write(content.toCharArray());
            //Flushes the stream and push data
            fileWriter.flush();
            fileWriter.close();
            return true;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

ランダムファイル読み書き
ファイルから、またはファイルへのランダムな読み取りや書き込みが必要な場合は、RandAccessFileを使用してファイルの読み取りや書き込みを行うことも考えられます.
/** * RandomAccessFile read * @param file * @return */
    public static String readFileByRandomAccess(File file) {
        if (file == null || !file.exists())
            return null;
        StringBuilder sb = new StringBuilder();
        try {
            RandomAccessFile readAccessFile = new RandomAccessFile(file, "r");
            int len = -1;
            byte[] buf = new byte[1024];
            while ((len = readAccessFile.read(buf)) != -1) {
                sb.append(new String(buf, 0 ,len));
            }
            readAccessFile.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

    /** * RandomAccessFile write into the file tail * @param file * @param content * @return */
    public static boolean writeFileByRandomAccess(File file, String content) {
        if (file == null || file.length() == 0 || isEmpty(content))
            return false;
        try {
            RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
            //insert into the file tail
            randomAccessFile.seek(file.length());
            randomAccessFile.writeUTF(content);
            randomAccessFile.close();
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }