--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) __.
À 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.
Recommended Posts