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 .
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);
Objects.equals(nullValue, billy);
Objects.equals(billy, nicolai);
Objects.equals(billy, copyOfbilly);
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);
Objects.deepEquals(raceTimes1, raceTimes2);
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());
Objects.compare(null, nicolai, new RaceTimeComparator());
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);
Objects.toString(nullValue);
Objects.toString(nullValue, "Did not finish");
Objects.toIdentityString(billy);
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);
Objects.hashCode(billy);
Objects.hash(billy, nicolai);
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);
Objects.isNull(nullValue);
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)
GO TO FULL VERSION