Java でファイルを読み取る複数の方法 1. ファイルの内容を複数の方法で読み取ります。
1. ファイルの内容をバイト単位で読み取ります
2. ファイルの内容を文字ごとに読み取ります
3. ファイルの内容を 1 行ずつ読み取ります
4. ファイルの内容をランダムに読み取る
*/
java.io.BufferedReaderをインポートします。
java.io.ファイルをインポートします。
java.io.FileInputStreamをインポートします。
java.io.FileReaderをインポートします。
インポート java.io.IOException;
java.io.InputStreamをインポートします。
インポートjava.io.InputStreamReader;
java.io.RandomAccessFile をインポートします。
java.io.Readerをインポートします。
パブリック クラス ReadFromFile {
/**
* ファイルをバイト単位で読み取ります。画像、サウンド、画像などのバイナリ ファイルを読み取るためによく使用されます。
* @param fileName ファイルの名前
*/
public static void readFileByBytes(String fileName){
ファイル file = 新しいファイル(ファイル名);
入力ストリーム = null;
試す {
System.out.println("一度に 1 バイトずつ、ファイルの内容をバイト単位で読み取ります:");
//一度に 1 バイトずつ読み取ります
in = 新しい FileInputStream(ファイル);
int tempbyte;
while((tempbyte=in.read()) != -1){
System.out.write(tempbyte);
}
in.close();
} キャッチ (IOException e) {
e.printStackTrace();
戻る;
}
試す {
System.out.println("一度に複数バイトずつ、ファイルの内容をバイト単位で読み取ります:");
//一度に複数バイトを読み取ります
byte[] tempbytes = 新しいバイト[100];
int バイト読み取り = 0;
in = 新しい FileInputStream(ファイル名);
ReadFromFile.showAvailableBytes(in);
//複数のバイトをバイト配列に読み取ります。byteread は一度に読み取られるバイト数です
while ((byteread = in.read(tempbytes)) != -1){
System.out.write(tempbytes, 0, byteread);
}
} キャッチ (例外 e1) {
e1.printStackTrace();
} ついに {
if (in != null){
試す {
in.close();
キャッチ (IOException e1) {
}
}
}
}
/**
* 文字単位でファイルを読み取り、テキスト、数値、その他の種類のファイルを読み取るためによく使用されます
* @param fileName ファイル名
*/
public static void readFileByChars(String fileName){
ファイル file = 新しいファイル(ファイル名);
リーダー リーダー = null;
試す {
System.out.println("一度に 1 バイトずつ、文字単位でファイルの内容を読み取ります:");
//一度に1文字ずつ読み込みます
リーダー = 新しいInputStreamReader(新しいFileInputStream(ファイル));
int tempchar;
while ((tempchar = Reader.read()) != -1){
//Windows の場合、2 つの文字 rn が一緒にある場合、改行を表します。
//ただし、これら 2 つの文字を別々に表示すると、行が 2 回変更されます。
//したがって、シールド r またはシールド n。そうしないと、空白行が多くなってしまいます。
if (((char)tempchar) != 'r'){
System.out.print((char)tempchar);
}
}
Reader.close();
} catch (例外 e) {
e.printStackTrace();
}
試す {
System.out.println("一度に複数バイトずつ、文字単位でファイルの内容を読み取ります:");
//複数の文字を一度に読み込む
char[] tempchars = 新しい char[30];
int charread = 0;
リーダー = 新しい InputStreamReader(新しい FileInputStream(ファイル名));
//複数の文字を文字配列に読み取ります。charread は一度に読み取られる文字数です
while ((charread = Reader.read(tempchars))!=-1){
//同様に r が表示されないようにシールドします
if ((charread == tempchars.length)&&(tempchars[tempchars.length-1] != 'r')){
System.out.print(tempchars);
}それ以外{
for (int i=0; i<charread; i++){
if(tempchars[i] == 'r'){
続く;
}それ以外{
System.out.print(tempchars[i]);
}
}
}
}
} キャッチ (例外 e1) {
e1.printStackTrace();
}ついに {
if (リーダー != null){
試す {
Reader.close();
キャッチ (IOException e1) {
}
}
}
}
/**
* 行単位でファイルを読み取り、行指向の形式のファイルを読み取るためによく使用されます
* @param fileName ファイル名
*/
public static void readFileByLines(String fileName){
ファイル file = 新しいファイル(ファイル名);
BufferedReader リーダー = null;
試す {
System.out.println("ファイルの内容を行単位で読み取り、一度に 1 行全体を読み取ります:");
リーダー = 新しい BufferedReader(新しい FileReader(ファイル));
文字列 tempString = null;
int 行 = 1;
// ファイルの終わりとして null が読み取られるまで、一度に 1 行ずつ読み取ります
while ((tempString = Reader.readLine()) != null){
//行番号を表示
System.out.println("line " + line + ": " + tempString);
行++;
}
Reader.close();
} キャッチ (IOException e) {
e.printStackTrace();
} ついに {
if (リーダー != null){
試す {
Reader.close();
キャッチ (IOException e1) {
}
}
}
}
/**
* ファイルの内容をランダムに読み取ります
* @param fileName ファイル名
*/
public static void readFileByRandomAccess(String fileName){
RandomAccessFile ランダムファイル = null;
試す {
System.out.println("ランダムなファイル内容を読み取ります:");
// ランダム アクセス ファイル ストリームを読み取り専用モードで開きます
randomFile = new RandomAccessFile(fileName, "r");
//ファイルの長さ、バイト数
長いファイルの長さ = ランダムファイル.length();
// ファイルの開始位置を読み取る
int beginIndex = (fileLength > 4) ? 4 : 0;
//読み込んだファイルの開始位置をbeginIndexの位置に移動します。
ランダムファイル.seek(beginIndex);
byte[] バイト = 新しいバイト[10];
int バイト読み取り = 0;
//一度に 10 バイトを読み取ります。ファイルの内容が 10 バイト未満の場合は、残りのバイトを読み取ります。
// 一度に読み取られるバイト数を byteread に代入する
while ((byteread = randomFile.read(bytes)) != -1){
System.out.write(bytes, 0, byteread);
}
} catch (IOException e){
e.printStackTrace();
} ついに {
if (randomFile != null){
試す {
ランダムファイル.close();
キャッチ (IOException e1) {
}
}
}
}
/**
* 入力ストリームに残っているバイト数を表示します
* @param で
*/
private static void showAvailableBytes(InputStream in){
試す {
System.out.println("現在のバイト入力ストリームのバイト数は次のとおりです:" + in.available());
} キャッチ (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
文字列ファイル名 = "C:/temp/newTemp.txt";
ReadFromFile.readFileByBytes(ファイル名);
ReadFromFile.readFileByChars(ファイル名);
ReadFromFile.readFileByLines(ファイル名);
ReadFromFile.readFileByRandomAccess(ファイル名);
}
}
2. ファイルの末尾にコンテンツを追加します
java.io.FileWriterをインポートします。
インポート java.io.IOException;
java.io.RandomAccessFile をインポートします。
/**
* ファイルの末尾にコンテンツを追加します
*/
パブリック クラス AppendToFile {
/**
※ファイルを追加する方法:RandomAccessFileを使用
* @param fileName ファイル名
* @param content 追加コンテンツ
*/
public static void appendMethodA(String fileName,
文字列の内容){
試す {
// 読み取りおよび書き込みモードでランダム アクセス ファイル ストリームを開きます
RandomAccessFilerandomFile = new RandomAccessFile(fileName, "rw");
//ファイルの長さ、バイト数
長いファイルの長さ = ランダムファイル.length();
//書き込みファイルポインタをファイルの末尾に移動します。
ランダムファイル.seek(ファイルの長さ);
ランダムファイル.writeBytes(コンテンツ);
ランダムファイル.close();
} catch (IOException e){
e.printStackTrace();
}
}
/**
* ファイルを追加する方法 B: FileWriter を使用する
* @param ファイル名
* @param コンテンツ
*/
public static void appendMethodB(String fileName, String content){
試す {
// ファイル ライターを開きます。コンストラクターの 2 番目のパラメーター true は、ファイルを追加形式で書き込むことを意味します。
FileWriter ライター = new FileWriter(fileName, true);
Writer.write(コンテンツ);
Writer.close();
} キャッチ (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
文字列ファイル名 = "C:/temp/newTemp.txt";
文字列コンテンツ = "新規追加!";
//方法Aに従ってファイルを追加します
AppendToFile.appendMethodA(ファイル名, コンテンツ);
AppendToFile.appendMethodA(fileName, "append end.n");
// ファイルの内容を表示する
ReadFromFile.readFileByLines(ファイル名);
//方法Bに従ってファイルを追加します
AppendToFile.appendMethodB(ファイル名, コンテンツ);
AppendToFile.appendMethodB(fileName, "append end.n");
// ファイルの内容を表示する
ReadFromFile.readFileByLines(ファイル名);
}
}