-
Un objet peut-il
File
correspondre à un fichier qui n'existe pas encore ?Oui, si vous transmettez la valeur du répertoire au constructeur.
String dirPath = "/"; File f = new File(dirPath); File[] files = f.listFiles();
Ceci est fait, par exemple, afin d'obtenir un tableau de fichiers.
public class MyClass { public static void main(String[] args) { boolean isObject = false; File file = new File("/"); if (file instanceof Object){ isObject = true; } boolean isFile = file.isFile(); // Tests whether the file denoted by this abstract pathname is a normal file. Это из documentации System.out.println(isObject + " "+ isFile); } }
Résultat :
vrai fauxFile
hérite deobject
. Réponse : oui ! J'attends vos commentaires. -
Comment convertir un objet
File
en typePath
?Méthode
toPath();
toPath(); //Returns a java.nio.file.Path object constructed from the this abstract path.
-
Pourquoi la classe Files est-elle nécessaire ?
Nous avons pris la classe comme base
File
, y avons ajouté un petit quelque chose de nouveau, renommé les méthodes et, à la fin, l'avons également divisée en deux. Il y a maintenant deux nouvelles classes -Path
etFiles
.Path
- c'est en fait un nouvel analogue de la classeFile
, etFiles
- c'est une classe utilitaire (par analogie avec lesArrays
& classesCollections
), toutes les méthodes statiques de la classe y ont été transféréesFile
. C'est "plus correct" du point de vue de la POO.MQuelques extraits des documents :
public final class Files
extends Object
Cette classe se compose exclusivement de méthodes statiques qui opèrent sur des fichiers, des répertoires ou d'autres types de fichiers.
Dans la plupart des cas, les méthodes définies ici délégueront au fournisseur de système de fichiers associé le soin d'effectuer les opérations sur les fichiers. -
Quelles classes d'archivage connaissez-vous ?
Un bon article sur ce sujet et un extrait de celui-ci : Archivage en Java
Il existe deux packages dans la spécification Java pour travailler avec des archives -
java.util.zip
etjava.util.jar
respectivement pour les archives zip et jar. La différence entre les formats jar et zip réside uniquement dans l'extension de l'archive zip. Un packagejava.util.jar
est similaire à un packagejava.util.zip
, à l'exception de l'implémentation de constructeurs et d'une méthodevoidputNextEntry(ZipEntry e)
de classeJarOutputStream
. Seul le package sera abordé ci-dessousjava.util.jar
. Pour convertir tous les exemples afin d'utiliser une archive zip, remplacez simplement Jar par Zip partout dans le code. -
Comment ajouter un répertoire à une archive ?
Pour ma part, j'ai compris cette question comme l'ajout d'un répertoire vide à une archive terminée. Je n'ai trouvé aucun exemple fonctionnel. Voici le code : (Il montre clairement que vous pouvez mettre n'importe quel fichier dans l'archive, mais avec un répertoire vide... Je ne sais pas comment répondre, je n'ai pas posté sur StackOverFlow, une telle question sera certainement voté contre) Si quelqu'un a des suggestions, écrivez.
public class Main { public static void main(String[] args) { String[] myFiles = {"D:\\forJava\\MyArtifactName\\packForTest\\res2.txt", "D:\\forJava\\MyArtifactName\\packForTest\\res.txt", "D:\\forJava\\MyArtifactName\\packForTest\\res4.txt", "D:\\forJava\\MyArtifactName\\packForTest\\testDir\\" }; String zipFile = "D:\\forJava\\MyArtifactName\\packForTest\\res.zip"; ZipUtility zipUtil = new ZipUtility(); try { zipUtil.zip(myFiles, zipFile); } catch (Exception ex) { // some errors occurred ex.printStackTrace(); } } }
La question concerne le dernier testDir, la JVM ne le met pas dans l'archive résultante, avec tous les autres fichiers txt, cela fonctionne bien.
ZipUtility.java
:import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipUtility { private static final int BUFFER_SIZE = 4096; public void zip(List<File> listFiles, String destZipFile) throws IOException { ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(destZipFile)); for (File file : listFiles) { if (file.isDirectory()) { zipDirectory(file, file.getName(), zos); } else { zipFile(file, zos); } } zos.flush(); zos.close(); } public void zip(String[] files, String destZipFile) throws IOException { List<File> listFiles = new ArrayList<File>(); for (int i = 0; i < files.length; i++) { listFiles.add(new File(files[i])); } zip(listFiles, destZipFile); } private void zipDirectory(File folder, String parentFolder, ZipOutputStream zos) throws IOException { for (File file : folder.listFiles()) { if (file.isDirectory()) { zipDirectory(file, parentFolder + "/" + file.getName(), zos); continue; } zos.putNextEntry(new ZipEntry(parentFolder + "/" + file.getName())); BufferedInputStream bis = new BufferedInputStream( new FileInputStream(file)); long bytesRead = 0; byte[] bytesIn = new byte[BUFFER_SIZE]; int read = 0; while ((read = bis.read(bytesIn)) != -1) { zos.write(bytesIn, 0, read); bytesRead += read; } zos.closeEntry(); } } private void zipFile(File file, ZipOutputStream zos) throws IOException { zos.putNextEntry(new ZipEntry(file.getName())); BufferedInputStream bis = new BufferedInputStream(new FileInputStream( file)); long bytesRead = 0; byte[] bytesIn = new byte[BUFFER_SIZE]; int read = 0; while ((read = bis.read(bytesIn)) != -1) { zos.write(bytesIn, 0, read); bytesRead += read; } zos.closeEntry(); } }
Code d'ici
-
Pourquoi sont-ils nécessaires
Properties
?Properties
est un fichier de propriétés. Sa structure : clé – valeur. Pour travailler avec de tels fichiers, Java a une classeProperties
, elle est héritée deHashTable<Object, Object>
Il y a un article sur sa manipulation - Exemples de fichiers de propriétés Java
-
Sous quelle forme les données sont-elles stockées dans le fichier
.properties
?La clé est le sens.
-
Est-il possible de modifier les données d'un objet
Properties
après l'avoir chargé à partir d'un fichier ?S'il est hérité de
HashMap
, alors vous le pouvez, alors seulement vous devrez annuler les modifications apportées à ce fichier. Il existe une méthode pour celasetProperty
.Voici le code :
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * Created by Роман on 12.09.2016. */ public class LoadAndSetProperties { public static void main(String[] args) { Properties prop = new Properties(); InputStream input = null; try { input = new FileInputStream("D:\\forJava\\MyArtifactName\\packForTest\\config.properties"); // load a properties file prop.load(input); // get the property value and print it out prop.setProperty("database", "ddfdfdfdfdf"); System.out.print(prop.getProperty("database")); } catch (IOException ex) { ex.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
Вывод:
ddfdfdfdfdf -
Зачем нужен класс
FileReader
?Java Docs:
public class FileReader
extends InputStreamReader
Convenience class for reading character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are appropriate. To specify these values yourself, construct an InputStreamReader on a FileInputStream.
FileReader is meant for reading streams of characters.
Класс для чтения символов файлов. Конструкторы этого класса предполагают, что codeировка символов дефолтная и дефолтный размер буфера являются подходящими. Whatбы задать эти значения самостоятельно, следует построить
InputStreamReader
надFileInputStream
.FileReader
предназначен для считывания потоков символов. -
Зачем нужен класс
FileWriter
?public class FileWriter
extends OutputStreamWriter
Convenience class for writing character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are acceptable. To specify these values yourself, construct an OutputStreamWriter on a FileOutputStream.
Whether or not a file is available or may be created depends upon the underlying platform. Some platforms, in particular, allow a file to be opened for writing by only one FileWriter (or other file-writing object) at a time. In such situations the constructors in this class will fail if the file involved is already open. FileWriter is meant for writing streams of characters.
Класс для записи символов файлов. Конструкторы этого класса предполагают, что codeировка символов дефолтная и дефолтный размер буфера являются приемлемым. Whatбы задать эти значения самостоятельно, следует построить
OutputStreamWriter
надFileOutputStream
. Является ли файл доступен для записи, зависит от используемой платформы. Некоторые платформы разрешают держать файл для записи только однимFileWriter
(or другого an object записи file), в одно время.FileWriter
предназначен для записи потоков символов. Для написания потоков необработанных byteов, используйтеFileOutputStream
.Эти классы (
FileReader
иFileWriter
) специально ориентированы для работы с текстом и строками.
DefNeo
Niveau 36
GO TO FULL VERSION