JavaのIO
- IOは、データストリームの入力と出力を指します。IOストリームは、主にバイトストリームと文字ストリームの2つのカテゴリに分類されます。バイトストリームはあらゆるタイプのデータ(画像、ビデオなど)を処理でき、文字ストリームは文字データのみを処理できます。
- IOは、ブロッキングIOと非ブロッキングNIOに分けられます
コンセプトと機能
- ストリームは、連続する開始点と終了点のセットであり、データ送信の一般的な用語または抽象化です。
- ストリーミングの本質はデータ送信です。
Javaフロークラス図の構造
フロー分類
文字ストリームとバイトストリーム
- 文字ストリーム:バイトストリームを読み取るときは、指定されたコードテーブルを確認してください。
- バイトストリームはバイト単位であり、文字ストリームは文字単位です。
- バイトストリームは任意のタイプのデータを処理でき、文字ストリームは文字タイプのデータのみを処理できます。
入力ストリームと出力ストリーム
- 入力ストリームは読み取りのみ可能です。
- 出力ストリームは書き込みのみ可能です。
RandomAccessFile类
このオブジェクトはストリームシステムのメンバーではありません。バイトストリームをカプセル化すると同時に、バッファ(文字配列)をカプセル化し、内部ポインタを介して文字配列内のデータを操作します。オブジェクトの機能:
-
このオブジェクトはファイルのみを操作できるため、コンストラクターは2種類のパラメーターを受け取ります。a。文字列ファイルパス; b。ファイルオブジェクト。
-
オブジェクトはファイルの読み取りと書き込みの両方が可能であり、オブジェクトをインスタンス化するときに操作モード(r、rw)を指定できます
ファイル操作Utils
- FileUtils.java
package utils;
import java.io.*;
import java.util.logging.Logger;
/**
* @Description:
* @Author:LiDong
* @Create:2021/1/4
* @Version:1.0.0
*/
public class FileUtils {
private static final Logger logger = Logger.getLogger(String.valueOf(FileUtils.class));
/**
* @return
* @Author LiDong
* @Description //RandomAccessFile
* @Date 20:48 2021/1/4
* @Param
**/
public static String toStringByRandomAccessFile(File file, String modle) throws IOException {
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
StringBuffer stringBuffer = new StringBuffer();
byte bit[] = new byte[1024];
int hasRead = 0;
/**
while ((hasRead=randomAccessFile.read(bit))>0) {
stringBuffer.append(new String(bit, 0, hasRead));
}*/
while (randomAccessFile.read(bit) != -1) {
stringBuffer.append(new String(bit));
}
randomAccessFile.close();
return String.valueOf(stringBuffer);
}
/**
* @return void
* @Author LiDong
* @Description //文件尾部追加内容
* @Date 21:20 2021/1/4
* @Param [file, res]
**/
public static void writeByRandomAccessFile(File file, String res) throws IOException {
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
// 记录文件长度,设置从文件末尾处写入内容
randomAccessFile.seek(randomAccessFile.length());
randomAccessFile.write(res.getBytes());
randomAccessFile.close();
}
/**
* @return java.lang.String
* @Author LiDong
* @Description //FileReader 读取文件中的内容:字符流
* @Date 21:28 2021/1/4
* @Param [file]
**/
public static String readByFileReader(File file) throws IOException {
StringBuffer stringBuffer = new StringBuffer();
// 创建FileReader对象
FileReader fileReader = new FileReader(file);
// 读取位置
int head = 0;
while ((head = fileReader.read()) != -1) {
// 将读取的内容强制转换为char类型
stringBuffer.append((char) head);
}
fileReader.close();
return String.valueOf(stringBuffer);
}
/**
* @return void
* @Author LiDong
* @Description //filewriter 字符流方式写文件
* @Date 21:37 2021/1/4
* @Param [file, res]
**/
public static void writeByFileWriter(File file, String res) throws IOException {
// FileWriter fileWriter = new FileWriter(file);
// 追加的方式写入内容
FileWriter fileWriter = new FileWriter(file, true);
fileWriter.write(res);
fileWriter.close();
}
/**
* @return java.lang.String
* @Author LiDong
* @Description //字符缓冲区输入流读文件
* @Date 21:43 2021/1/4
* @Param [file]
**/
public static String readByBufferedReader(File file) throws IOException {
StringBuffer stringBuffer = new StringBuffer();
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String strLine = "";
while ((strLine = bufferedReader.readLine()) != null) {
stringBuffer.append(strLine);
}
fileReader.close();
bufferedReader.close();
return String.valueOf(stringBuffer);
}
/**
* @Author LiDong
* @Description // FileInputStream 读文件
* @Date 21:53 2021/1/4
* @Param [file]
* @return java.lang.String
**/
public static String readByFileInputStream(File file) throws IOException {
StringBuffer stringBuffer = new StringBuffer();
//创建流对象
FileInputStream fileInputStream = new FileInputStream(file);
int data;
//available() 可读取的字节数
logger.info("可读取的字节数:" + fileInputStream.available());
//循环读取内容
while ((data = fileInputStream.read()) != -1) {
stringBuffer.append((char)data);
}
//关闭流对象
fileInputStream.close();
return String.valueOf(stringBuffer);
}
/**
* @Author LiDong
* @Description //FileOutputStream 写文件
* @Date 21:56 2021/1/4
* @Param [file, res]
* @return void
**/
public static void writeByFileOutPutStream(File file,String res) throws IOException {
//放到字节数组里
byte[] words = res.getBytes();
FileOutputStream fileOutPutStream = new FileOutputStream(file,true);
//写入文件
fileOutPutStream.write(words,0,words.length);
System.out.println("文件已更新");
//关闭流
fileOutPutStream.close();
}
}
。。。つづく!