JavaRush /Java-Blog /Random-DE /Kaffeepause Nr. 229. So arbeiten Sie mit Dateien und Eing...

Kaffeepause Nr. 229. So arbeiten Sie mit Dateien und Eingabe/Ausgabe in Java. Hilfsmethoden der Objects-Klasse

Veröffentlicht in der Gruppe Random-DE

So arbeiten Sie mit Dateien und Eingabe/Ausgabe in Java

Quelle: Medium In diesem Tutorial wird erklärt, wie man Dateien in Java erstellt, liest, schreibt und löscht. Außerdem erfahren Sie, wie die Klassen File , InputStream und OutputStream funktionieren . Kaffeepause Nr. 229.  So arbeiten Sie mit Dateien und Eingabe/Ausgabe in Java.  Hilfsmethoden der Objects-Klasse - 1

Einführung

In Java werden Dateien durch die File- Klasse dargestellt . Die File- Klasse stellt Methoden zum Erstellen, Lesen, Schreiben und Löschen von Dateien bereit. Eingabe/Ausgabe (E/A) ist der Prozess der Datenübertragung zwischen einem Programm und einer externen Quelle, beispielsweise einer Datei, einem Netzwerk-Socket oder einer Konsole. Java bietet viele Klassen für die Eingabe/Ausgabe, einschließlich der Klassen InputStream und OutputStream .

Dateien erstellen

Um eine Datei zu erstellen, können Sie die Methode File.createNewFile() verwenden . Es wird eine neue Datei erstellt, wenn noch keine Datei mit demselben Namen vorhanden ist. Wenn eine solche Datei bereits vorhanden ist, löst die Methode createNewFile() eine IOException aus . Hier ist ein Beispiel für die Erstellung einer neuen Datei mit dem Namen myfile.txt im aktuellen Verzeichnis:
File myFile = new File("myfile.txt");
myFile.createNewFile();

Dateien lesen

Um eine Datei in Java zu lesen, können Sie die FileInputStream- Klasse verwenden . Es bietet Methoden zum Lesen von Bytes aus einer Datei. Um den Inhalt einer Datei zu lesen, sollten Sie die Methode read() verwenden . Diese Methode liest ein Byte aus einer Datei und gibt den Wert des Bytes zurück. Der folgende Code liest beispielsweise den Inhalt der Datei myfile.txt und gibt ihn auf der Konsole aus:
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();

Aufnahmedateien

Um in eine Datei zu schreiben, können Sie die FileOutputStream- Klasse verwenden . Es bietet Methoden zum Schreiben von Bytes in eine Datei. Um den Inhalt einer Zeichenfolge in eine Datei zu schreiben, verwenden Sie die Methode write() . Diese Methode schreibt die angegebene Anzahl an Bytes aus einem angegebenen Array in eine Datei. Hier ist ein Beispiel dafür, wie die Zeichenfolge „Hello, world!“ geschrieben wird. zur Datei myfile.txt :
File myFile = new File("myfile.txt");
FileOutputStream outputStream = new FileOutputStream(myFile);
byte[] buffer = "Hello, world!".getBytes();
outputStream.write(buffer);
outputStream.close();

Dateien löschen

Um eine Datei in Java zu löschen, sollten Sie die Methode File.delete() verwenden . Wenn die Datei, die Sie löschen möchten, nicht vorhanden ist, gibt die Methode delete() false zurück . Hier ist ein Beispiel für Code, der die Datei myfile.txt löscht :
File myFile = new File("myfile.txt");
myFile.delete();

Abschluss

In diesem Beitrag haben wir die Grundlagen der Arbeit mit Dateien und I/O-Java besprochen. Sie haben gelernt, wie Sie Dateien erstellen, lesen, schreiben und löschen. Sie haben auch etwas über die File- Klasse und die InputStream- und OutputStream -Klassen gelernt .

Hilfsmethoden der Objects-Klasse – wie man mit ihnen arbeitet

Quelle: Inside Java Mit diesem Beitrag verbessern Sie Ihr Wissen über die verschiedenen Methoden, die in der Objects- Klasse bereitgestellt werden . Die Objects- Klasse in Java verfügt über viele Hilfsmethoden, die es einfach machen, verschiedene Operationen an Objekten durchzuführen. Die Objects- Klasse wurde in JDK-Versionen mehrfach aktualisiert : In JDK 8 und 9 gab es sehr bedeutende Aktualisierungen und in JDK 16 und 19 kleinere Aktualisierungen. Schauen wir uns an, wie Sie die Objects- Klasse verwenden können .

Vergleich von Objekten

Objects bietet mehrere Optionen zum Vergleichen der Werte zweier Objekte. Der Hauptvorteil der Verwendung der Objects- Implementierung ist die Sicherheit vor Nullvorkommen .

gleich()

Nachfolgend finden Sie ein Beispiel für den Vergleich zweier Datensätze.
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()

In der Objects- Klasse können Sie deepEquals() auch verwenden , um zwei Arrays zu vergleichen . Im Gegensatz zu regulären equal() werden hierdurch in Arrays gespeicherte Werte verglichen, was zu konsistenteren Ergebnissen führen sollte. Grundsätzlich durchläuft diese Methode 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

vergleichen()

Objects verfügt außerdem über eine Compare()- Methode , die zwei Objekte und einen Comparator<T> annehmen kann . Die Methode „compare()“ ist eine der wenigen nullunsicheren Methoden in Objects , da sie keine akzeptable Rückgabe hat, wenn eines ihrer Argumente null ist .
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

String und HashCode

Die Objects- Klasse stellt Methoden zum Konvertieren eines Objekts in String- und HashCode- Werte bereit . Auch hier besteht der Hauptvorteil dieser Methoden darin, dass sie vor Null- Vorkommen geschützt sind .

In String konvertieren

Eine der interessanteren Methoden ist toString(obj, nullDefault) , die einen Standardwert bereitstellt, wenn ein Fehler auftritt. Das bedeutet, dass toIdentityString(obj) toString() und hashCode() der übergebenen Objekte zurückgibt , als ob keine dieser Methoden überschrieben worden wäre.
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

In HashCode konvertieren

Objects bietet auch Methoden zum Konvertieren eines Objekts in seinen Hash-Codewert.
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]

Auf Null prüfen

Die Objects- Klasse stellt mehrere Methoden zum Überprüfen und Behandeln von null bereit .

NullPointException auf null auslösen

Die Methode requireNonNull(obj) löst eine NullPointException aus , wenn der übergebene Wert null ist .
record RaceTime(String runnerName, Duration time) {
	RaceTime{
		runnerName = Objects.requireNonNull(runnerName);
		time = Objects.requireNonNull(time);
	}
}

Auslösen einer NullPointException bei null mit einer Nachricht an den Benutzer

Die Methode requireNonNull(obj, String) löst einen NullPointException- Fehler mit einer Meldung an den Benutzer aus, wenn der übergebene Wert null ist .
record RaceTime(String runnerName, Duration time) {
	RaceTime{
		runnerName = Objects.requireNonNull(runnerName, "runner name required!");
		time = Objects.requireNonNull(time, "race time required!");
	}
}

Gibt den Standardwert für null zurück

Die Methode requireNonNullElse(obj, defaultValue) gibt den übergebenen defaultValue zurück , wenn obj null ist .
record RaceTime(String runnerName, Duration time) {
	RaceTime{
		runnerName = Objects.requireNonNullElse(runnerName, "John Smith");
		time = Objects.requireNonNullElse(time, Duration.ZERO);
	}
}

Verwendung von Lieferanten

Die Objects- Klasse stellt außerdem die Methoden requireNonNull(obj, Supplier<String>) und T requireNonNullElseGet(T, Supplier<T>) bereit , mit denen eine Nachricht oder ein Standardwert bereitgestellt werden kann. Sie sollten nur verwendet werden, wenn das Erstellen einer Nachricht oder eines Standardwerts erhebliche Auswirkungen auf die Leistung hätte.
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);
	}
}

Prädiktive Nullprüfung

Objects bietet eine Nullprüfung zur Verwendung in Prädikaten, kann jedoch auch in anderen Szenarios verwendet werden.
record RaceTime(String runnerName, Duration time) {}

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

Indexprüfung

Schließlich bietet die Objects- Klasse mehrere Optionen zum Überprüfen der Indexposition beim Durchlaufen eines File- , String- , Collection- oder ähnlichen Objekts. Einige dieser Methoden wurden kürzlich zu JDK 16 hinzugefügt.
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)
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION