JavaRush /Java Blog /Random-JA /コーヒーブレイク#229。Java でファイルと入出力を操作する方法。Objects クラスのユーティリティ メソ...

コーヒーブレイク#229。Java でファイルと入出力を操作する方法。Objects クラスのユーティリティ メソッド

Random-JA グループに公開済み

Java でファイルと入出力を操作する方法

出典: Medium このチュートリアルでは、Java でファイルを作成、読み取り、書き込み、削除する方法を説明します。また、File クラスInputStreamクラス、およびOutputStreamクラスがどのように機能するかについても学習します。 コーヒーブレイク#229。 Java でファイルと入出力を操作する方法。 Objects クラスのユーティリティ メソッド - 1

導入

Java では、ファイルはFileクラスによって表されます。Fileクラスは、ファイルの作成、読み取り、書き込み、削除のためのメソッドを提供します。入出力 (I/O) は、プログラムとファイル、ネットワーク ソケット、コンソールなどの外部ソースとの間でデータを転送するプロセスです。Java には、 InputStreamクラスやOutputStreamクラスなど、入出力用のクラスが多数用意されています。

ファイルの作成

ファイルを作成するには、File.createNewFile()メソッドを使用できます。同じ名前のファイルが存在しない場合は、新しいファイルが作成されます。そのようなファイルがすでに存在する場合、createNewFile()メソッドはIOExceptionをスローします。現在のディレクトリに myfile.txtという新しいファイルを作成する方法の例を次に示します。
File myFile = new File("myfile.txt");
myFile.createNewFile();

ファイルの読み取り

Java でファイルを読み取るには、FileInputStreamクラスを使用できます。ファイルからバイトを読み取るメソッドを提供します。ファイルの内容を読み取るには、read()メソッドを使用する必要があります。このメソッドは、ファイルから 1 バイトを読み取り、そのバイトの値を返します。たとえば、次のコードはファイルmyfile.txtの内容を読み取り、それをコンソールに出力します。
File myFile = new File("myfile.txt");
FileInputStream inputStream = new FileInputStream(myFile);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
    System.out.print(new String(buffer, 0, bytesRead));
}
inputStream.close();

録音ファイル

ファイルに書き込むには、FileOutputStreamクラスを使用できます。ファイルにバイトを書き込むためのメソッドを提供します。文字列の内容をファイルに書き込むには、write()メソッドを使用します。このメソッドは、指定された配列から指定されたバイト数をファイルに書き込みます。以下は、文字列「Hello, world!」の記述例です。myfile.txtファイルに:
File myFile = new File("myfile.txt");
FileOutputStream outputStream = new FileOutputStream(myFile);
byte[] buffer = "Hello, world!".getBytes();
outputStream.write(buffer);
outputStream.close();

ファイルの削除

Java でファイルを削除するには、File.delete()メソッドを使用する必要があります。削除するファイルが存在しない場合、delete()メソッドはfalseを返します。myfile.txtファイルを削除するコードの例を次に示します。
File myFile = new File("myfile.txt");
myFile.delete();

結論

この投稿では、ファイルと I/O Java の操作の基本について説明しました。ファイルの作成、読み取り、書き込み、削除の方法を学習しました。また、 Fileクラス、InputStream クラスおよびOutputStreamクラスについても学習しました。

Objects クラスのユーティリティ メソッド - それらの操作方法

出典: Inside Javaこの投稿により、 Objectsクラスで提供されるさまざまなメソッドについての知識が深まります。Java のObjects クラスには、オブジェクトに対してさまざまな操作を簡単に実行できるようにする多くのユーティリティ メソッドがあります。Objectsクラスは、 JDK リリースでいくつかの更新を受けています。JDK 8 と 9 では非常に重要な更新があり、JDK 16 と 19 ではマイナーな更新があります。Objectsクラスの使用方法を見てみましょう。

オブジェクトの比較

オブジェクトには、 2 つのオブジェクトの値を比較するためのいくつかのオプションが用意されています。Objects実装を使用する主な利点は、null の発生に対する安全性です。

等しい()

以下は 2 つのレコードを比較する例です。
record RaceTime(String runnerName, Duration time) {}

RaceTime nullValue = null;
RaceTime billy =
	new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime copyOfbilly =
	new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
	new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));
nullValue.equals(billy);//NPE
Objects.equals(nullValue, billy);// false
Objects.equals(billy, nicolai);// false
Objects.equals(billy, copyOfbilly);// true

deepEquals()

Objectsクラスでは、 deepEquals()を使用して2 つの配列を比較することもできます。通常のquals()とは異なり、これは配列に格納された値を比較するため、より一貫性のある結果が得られます。基本的に、このメソッドはArrays.deepEquals()を経由します。
record RaceTime(String runnerName, Duration time) {}

RaceTime billy =
	new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
	new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));

RaceTime[] raceTimes1 = new RaceTime[] { billy, nicolai };
RaceTime[] raceTimes2 = new RaceTime[] { billy, nicolai };

Objects.equals(raceTimes1, raceTimes2);// false
Objects.deepEquals(raceTimes1, raceTimes2);// true

比較する()

Objects には、2 つのオブジェクトとComparator<T>を受け取ることができるCompare()メソッドもあります。Compare()メソッドは、引数の 1 つがnullの場合、許容される戻り値がないため、Objectsの数少ないnull -unsafe メソッドの1 つです。
record RaceTime(String runnerName, Duration time) {}
class RaceTimeComparator implements Comparator<RaceTime> {
@Override
public int compare(RaceTime o1, RaceTime o2) {
	return o1.time.compareTo(o2.time);
}
}
RaceTime billy =
new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));

Objects.compare(billy, nicolai, new RaceTimeComparator());//-1
Objects.compare(null, nicolai, new RaceTimeComparator());//NPE

文字列とハッシュコード

Objectsクラスは、オブジェクトをString 値HashCode値に変換するメソッドを提供します。繰り返しますが、これらのメソッドの主な利点は、 null の発生から安全であることです。

文字列に変換

より興味深いメソッドの 1 つはtoString(obj, nullDefault)で、エラーが発生した場合にデフォルト値を提供します。これは、toIdentityString(obj) が、渡されたオブジェクトの toString()hashCode()を、どちらのメソッドも上書きされていないかのように返すことを意味します。
record RaceTime(String runnerName, Duration time) {}

RaceTime nullValue = null;
RaceTime billy =
	new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
	new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));

Objects.toString(billy);//RaceTime[runnerName=Billy Korando, time=PT1M30S]
Objects.toString(nullValue);//null
Objects.toString(nullValue, "Did not finish");//Did not finish
Objects.toIdentityString(billy);//ObjectsExamples$1RaceTime@251a69d7

ハッシュコードに変換

オブジェクトには、オブジェクトをそのハッシュ コード値に変換するメソッドも提供されます。
record RaceTime(String runnerName, Duration time) {}

RaceTime nullValue = null;
RaceTime billy =
	new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
	new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));

Objects.hashCode(nullValue);//0
Objects.hashCode(billy);//[HashValue]
Objects.hash(billy, nicolai);//[HashValue]

nullのチェック

Objectsクラスには、nullをチェックして処理するためのメソッドがいくつか用意されています。

null で NullPointException をスローする

requireNonNull(obj)メソッドは、渡された値がnullの場合、 NullPointException をスローします。
record RaceTime(String runnerName, Duration time) {
	RaceTime{
		runnerName = Objects.requireNonNull(runnerName);
		time = Objects.requireNonNull(time);
	}
}

ユーザーへのメッセージとともに null に対して NullPointException をスローする

requireNonNull(obj, String)メソッドは、渡された値がnullの場合、ユーザーにメッセージを含むNullPointExceptionエラーをスローします。
record RaceTime(String runnerName, Duration time) {
	RaceTime{
		runnerName = Objects.requireNonNull(runnerName, "runner name required!");
		time = Objects.requireNonNull(time, "race time required!");
	}
}

null の場合はデフォルト値を返します

requireNonNullElse(obj,defaultValue)メソッドは、objがnullの場合、渡されたdefaultValueを返します。
record RaceTime(String runnerName, Duration time) {
	RaceTime{
		runnerName = Objects.requireNonNullElse(runnerName, "John Smith");
		time = Objects.requireNonNullElse(time, Duration.ZERO);
	}
}

サプライヤーの使用

Objectsクラスには、requireNonNull(obj, Supplier<String>)メソッドとT requireNonNullElseGet(T, Supplier<T>)メソッドも提供されており、これらを使用してメッセージまたはデフォルト値を提供できます。これらは、メッセージまたはデフォルト値の作成がパフォーマンスに重大な影響を与える場合にのみ使用してください。
record RaceTime(String runnerName, Duration time) {
static Supplier<String> noNameMsgSupplier = () -> "runner name required!";
static Supplier<String> noTimeMsgSupplier = () -> "race time required!";
	RaceTime{
		runnerName = Objects.requireNonNull(runnerName, noNameMsgSupplier);
		time = Objects.requireNonNull(time, noTimeMsgSupplier);
	}
}
record RaceTime(String runnerName, Duration time) {
static Supplier<String> noNameValueSupplier = () -> "John Smith";
static Supplier<Duration> noTimeValueSupplier = () -> Duration.ZERO;
	RaceTime{
		runnerName = Objects.requireNonNullElseGet(runnerName, noNameValueSupplier);
		time = Objects.requireNonNullElseGet(time, noTimeValueSupplier);
	}
}

予測nullチェック

オブジェクトは述語で使用するためのnullチェックを提供しますが、他のシナリオでも同様に使用できます。
record RaceTime(String runnerName, Duration time) {}

RaceTime nullValue = null;
Objects.nonNull(nullValue);//false
Objects.isNull(nullValue);//true

インデックスチェック

最後に、Objectsクラスは、 FileStringCollection 、または同様のオブジェクトを走査するときにインデックス位置をチェックするためのいくつかのオプションを提供します。これらのメソッドの一部は最近 JDK 16 に追加されました。
int checkIndex(int index, int length)

int checkFromToIndex(int fromIndex, int toIndex, int length)

int checkFromIndexSize(int fromIndex, int size, int length)

long checkIndex(long index, long length)

long checkFromToIndex(long fromIndex, long toIndex, long length)

long checkFromIndexSize(long fromIndex, long size, long length)
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION