Comment travailler avec des fichiers et des entrées/sorties en Java
Source :
Medium Ce tutoriel explique comment créer, lire, écrire et supprimer des fichiers en Java. Vous apprendrez également comment fonctionnent les classes File , InputStream et OutputStream .
Introduction
En Java, les fichiers sont représentés par la classe
File . La classe
File fournit des méthodes pour créer, lire, écrire et supprimer des fichiers. Les entrées/sorties (E/S) sont le processus de transfert de données entre un programme et une source externe, telle qu'un fichier, une prise réseau ou une console. Java fournit de nombreuses classes d'entrée/sortie, notamment les classes
InputStream et
OutputStream .
Création de fichiers
Pour créer un fichier, vous pouvez utiliser la méthode
File.createNewFile() . Il créera un nouveau fichier si un fichier portant le même nom n'existe pas déjà. Si un tel fichier existe déjà, la méthode
createNewFile() lèvera une
IOException . Voici un exemple de création d'un nouveau fichier appelé
monfichier.txt dans le répertoire actuel :
File myFile = new File("myfile.txt");
myFile.createNewFile();
Lecture de fichiers
Pour lire un fichier en Java, vous pouvez utiliser la classe
FileInputStream . Il fournit des méthodes pour lire les octets d'un fichier. Pour lire le contenu d'un fichier, vous devez utiliser la méthode
read() . Cette méthode lit un octet dans un fichier et renvoie la valeur de l'octet. Par exemple, le code suivant lit le contenu du fichier
monfichier.txt et l'imprime sur la console :
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();
Enregistrement de fichiers
Pour écrire dans un fichier, vous pouvez utiliser la classe
FileOutputStream . Il fournit des méthodes pour écrire des octets dans un fichier. Pour écrire le contenu d'une chaîne dans un fichier, utilisez la méthode
write() . Cette méthode écrit le nombre spécifié d'octets d'un tableau spécifié dans un fichier. Voici un exemple de la façon dont la chaîne « Hello, world ! » est écrite. au fichier
monfichier.txt :
File myFile = new File("myfile.txt");
FileOutputStream outputStream = new FileOutputStream(myFile);
byte[] buffer = "Hello, world!".getBytes();
outputStream.write(buffer);
outputStream.close();
Suppression de fichiers
Pour supprimer un fichier en Java, vous devez utiliser la méthode
File.delete() . Si le fichier que vous souhaitez supprimer n’existe pas, la méthode
delete() renverra
false . Voici un exemple de code qui supprime le fichier
myfile.txt :
File myFile = new File("myfile.txt");
myFile.delete();
Conclusion
Dans cet article, nous avons abordé les bases du travail avec les fichiers et les E/S Java. Vous avez appris à créer, lire, écrire et supprimer des fichiers. Vous avez également découvert la classe
File et
les classes InputStream et
OutputStream .
Méthodes utilitaires de la classe Objects - comment travailler avec elles
Source :
Inside Java Avec cet article, vous améliorerez vos connaissances des différentes méthodes fournies dans la classe Objects . La classe
Objects en Java dispose de nombreuses méthodes utilitaires qui facilitent l'exécution de diverses opérations sur les objets.
La classe Objects a subi plusieurs mises à jour dans les versions du JDK : il y a eu des mises à jour très importantes dans les JDK 8 et 9, et des mises à jour mineures dans les JDK 16 et 19. Voyons comment utiliser
la classe Objects .
Comparaison d'objets
Objects propose plusieurs options pour comparer les valeurs de deux objets. Le principal avantage de l'utilisation
de l'implémentation Objects est la sécurité contre les occurrences
nulles .
équivaut à()
Vous trouverez ci-dessous un exemple de comparaison de deux enregistrements.
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);
profondEquals()
Dans la classe
Objects , vous pouvez également utiliser deepEquals() pour comparer deux tableaux . Contrairement
aux égaliseurs réguliers() , cela comparera les valeurs stockées dans les tableaux, ce qui devrait conduire à des résultats plus cohérents. Fondamentalement, cette méthode passe par
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);
comparer()
Objects a également une méthode
compare() , qui peut prendre deux objets et
un Comparator<T> . La méthode
compare() est l'une des rares méthodes
null -unsafe dans Objects car elle n'a aucun retour acceptable si l'un de ses arguments est
null .
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());
Chaîne et HashCode
La classe Objects fournit des méthodes pour convertir un objet en valeurs String et HashCode . Encore une fois, le principal avantage de ces méthodes est qu’elles sont à l’abri des occurrences nulles .
Convertir en chaîne
L'une des méthodes les plus intéressantes est
toString(obj, nullDefault) , qui fournit une valeur par défaut si une erreur se produit. Cela signifie que
toIdentityString(obj) renvoie
toString() et
hashCode() des objets transmis comme si aucune de ces méthodes n'avait été écrasée.
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);
Convertir en HashCode
Objects fournit également des méthodes pour convertir un objet en sa valeur de code de hachage.
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);
Vérification de null
La classe
Objects fournit plusieurs méthodes pour vérifier et gérer
null .
Lancer NullPointException sur null
La méthode
requireNonNull(obj) lèvera
une NullPointException si la valeur transmise est
null .
record RaceTime(String runnerName, Duration time) {
RaceTime{
runnerName = Objects.requireNonNull(runnerName);
time = Objects.requireNonNull(time);
}
}
Lancer NullPointException sur null avec un message à l'utilisateur
La méthode
requireNonNull(obj, String) générera une erreur
NullPointException avec un message à l'utilisateur si la valeur transmise est
null .
record RaceTime(String runnerName, Duration time) {
RaceTime{
runnerName = Objects.requireNonNull(runnerName, "runner name required!");
time = Objects.requireNonNull(time, "race time required!");
}
}
Renvoie la valeur par défaut pour null
La méthode
requireNonNullElse(obj, defaultValue) renverra la
valeur defaultValue transmise si
obj est
null .
record RaceTime(String runnerName, Duration time) {
RaceTime{
runnerName = Objects.requireNonNullElse(runnerName, "John Smith");
time = Objects.requireNonNullElse(time, Duration.ZERO);
}
}
Utiliser des fournisseurs
La classe
Objects fournit également les méthodes requireNonNull(obj, Supplier<String>) et
T requireNonNullElseGet(T, Supplier<T>) , qui peuvent être utilisées pour fournir un message ou une valeur par défaut. Ils ne doivent être utilisés que si la création d'un message ou d'une valeur par défaut aurait un impact significatif sur les performances.
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);
}
}
Vérification nulle prédictive
Objects fournit une vérification
nulle à utiliser dans les prédicats, bien qu'elle puisse également être utilisée dans d'autres scénarios.
record RaceTime(String runnerName, Duration time) {}
RaceTime nullValue = null;
Objects.nonNull(nullValue);
Objects.isNull(nullValue);
Vérification de l'index
Enfin, la classe
Objects fournit plusieurs options pour vérifier la position de l'index lors du parcours d'
un objet File ,
String ,
Collection ou similaire. Certaines de ces méthodes ont été récemment ajoutées au 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)
GO TO FULL VERSION