A propos du traitement de la copie de fichiers en Java

Conclusion

--En Java7 ou version ultérieure, s'il n'y a pas de circonstances particulières, veuillez utiliser les fonctions de la bibliothèque standard telles que __java.nio.file.Files # copy (Path, Path, CopyOption) __.

Si vous voulez vraiment mettre en œuvre votre propre

À partir de 2017, il ne devrait pas être nécessaire de le mettre en œuvre de manière indépendante, mais pour une raison quelconque, il s'agit de le mettre en œuvre de manière indépendante. Si vous recherchez sur le Web, vous trouverez un code similaire au suivant.

Échantillon 1



public static void copyFile(File sf, File df) {
		FileChannel sc = null, dc = null;
		try {
			sc = new FileInputStream(sf).getChannel();
			dc = new FileOutputStream(df).getChannel();
			dc.transferFrom(sc, 0, sc.size());
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (dc != null) try { dc.close(); } catch (IOException e) {}
			if (sc != null) try { sc.close(); } catch (IOException e) {}
		}
	}

Cette méthode fonctionne très bien, mais en fonction de l'outil d'analyse de syntaxe statique,

	sc = new FileInputStream(sf).getChannel();

Là où j'obtiens ce FileChannel dans la chaîne de méthodes, je suis averti que __ "FileInputStream peut ne pas être fermé" __ (idem pour FileOutputStream)

Heureusement, la documentation Java 6 __java.io.FileInputStream # close () __ indique

Fermez le flux d'entrée du fichier et libérez les ressources système associées à ce flux. Si ce flux est associé à un canal, fermez également ce canal.

Il y en a, alors fermons FileInputStream (FileOutputStream). Est-ce quelque chose comme ça (Vous pouvez également fermer FileChannel. L'appel des méthodes de fermeture FileInputStream et FileChannel ne plantera pas, même si cela n'a pas de sens)

Échantillon 2


	public static void copyFile(File sf, File df) {
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			fis = new FileInputStream(sf);
			fos = new FileOutputStream(df);
			
			FileChannel sc = fis.getChannel();
			FileChannel dc = fos.getChannel();
			dc.transferFrom(sc, 0, sc.size());
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (fos != null) try { fos.close(); } catch (IOException e) {}
			if (fis != null) try { fis.close(); } catch (IOException e) {}
		}
	}

Par conséquent, Sample 2 est moins susceptible d'être averti lorsqu'un outil d'analyse de syntaxe statique, etc. Si vous souhaitez rechercher sur le Web et copier Sample1, veuillez utiliser Sample2. ~~ Il sera plus facile pour les gens de maintenir plus tard ~~

Si vous souhaitez implémenter le vôtre dans Java7 ou version ultérieure, [instruction try-with-resources](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/language/try-with-resources. Veuillez utiliser html). Ce sera très simple.

référence

Recommended Posts

A propos du traitement de la copie de fichiers en Java
Traitement parallèle mesuré avec Java
À propos de la classe abstraite Java
Collecte de copies approfondies en Java
Lire le fichier de propriétés Java en C #
Décompressez le fichier zip en Java
Enregistrer la sortie dans un fichier en Java
A propos du renvoi d'une référence dans un Java Getter
[Création] Un mémorandum sur le codage en Java
À propos des enregistrements ajoutés pour l'aperçu dans Java JDK 14
Traitement des threads de l'interface utilisateur asynchrone Android
Lire le fichier xlsx en Java avec Selenium
Discussion continue sur l'écriture de Java avec Emacs @ 2018
Exemple pour décompresser le fichier gz en Java
[Java] À propos des fonctionnalités de Java 12
Partition en Java
[Java] À propos des tableaux
Janken à Java
Quelque chose à propos de java
Traitement des threads Java
Où est Java
Interface [Java]
Traitement des chaînes Java
À propos de la classe Java
À propos des tableaux Java
À propos de l'héritage Java
À propos de l'interface, interface java
[Java] Traitement multi-thread
À propos du phénomène que StackOverflowError se produit lors du traitement à l'aide d'expressions régulières Java
Taux circonférentiel à Java
[Java] Traitement de flux
FizzBuzz en Java
Lors de l'appel de println etc. à partir d'un fichier de classe Java externe en traitement
À propos de Java Var
À propos de Java Literal
À propos des commandes Java
traitement itératif java
java qui génère un fichier au format vmg au format eml
À propos de la confusion observée dans les serveurs Java de démarrage
Lire une chaîne dans un fichier PDF avec Java
À propos de l'idée des classes anonymes en Java
Une histoire sur le JDK à l'ère de Java 11
Essayez de gratter environ 30 lignes en Java (sortie CSV)
Traitement parallèle et parallèle dans divers langages (édition Java)
À propos de var utilisé en Java (type de variable locale)
Histoire d'essayer de faire fonctionner le fichier JAVA
Un fichier bat qui utilise Java dans Windows
Présentation de NLP4J- [000] Natural Language Processing Index en Java
À propos de la sortie du journal Java
À propos de l'interface fonctionnelle Java
Lire JSON en Java
Implémentation de l'interpréteur par Java
Faites un blackjack avec Java
[Android / Java] Transition d'écran et traitement de retour par fragments
Application Janken en Java
Programmation par contraintes en Java
À propos de la division de classe (Java)
Mettez java8 dans centos7
NVL-ish guy en Java