JavaRush /Blog Java /Random-FR /Pause café #229. Comment travailler avec des fichiers et ...

Pause café #229. Comment travailler avec des fichiers et des entrées/sorties en Java. Méthodes utilitaires de la classe Objects

Publié dans le groupe Random-FR

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 . Pause café #229.  Comment travailler avec des fichiers et des entrées/sorties en Java.  Méthodes utilitaires de la classe Objects - 1

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);//NPE
Objects.equals(nullValue, billy);// false
Objects.equals(billy, nicolai);// false
Objects.equals(billy, copyOfbilly);// true

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);// false
Objects.deepEquals(raceTimes1, raceTimes2);// true

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());//-1
Objects.compare(null, nicolai, new RaceTimeComparator());//NPE

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);//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

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);//0
Objects.hashCode(billy);//[HashValue]
Objects.hash(billy, nicolai);//[HashValue]

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);//false
Objects.isNull(nullValue);//true

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)
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION