JavaRush /Blog Java /Random-FR /Niveau 31. Réponses aux questions d'entretien sur le suje...
DefNeo
Niveau 36

Niveau 31. Réponses aux questions d'entretien sur le sujet du niveau

Publié dans le groupe Random-FR
Niveau 31. Réponses aux questions d'entretien sur le thème du niveau - 1
  1. Un objet peut-il Filecorrespondre à 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 faux

    Filehérite de object. Réponse : oui ! J'attends vos commentaires.

  2. Comment convertir un objet Fileen type Path?

    MéthodetoPath();

    toPath(); //Returns a java.nio.file.Path object constructed from the this abstract path.
  3. 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 - Pathet Files.

    Path- c'est en fait un nouvel analogue de la classe File, et Files- c'est une classe utilitaire (par analogie avec les Arrays& classes Collections), toutes les méthodes statiques de la classe y ont été transférées File. C'est "plus correct" du point de vue de la POO.M

    Quelques 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.

  4. 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.zipet java.util.jarrespectivement 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 package java.util.jarest similaire à un package java.util.zip, à l'exception de l'implémentation de constructeurs et d'une méthode voidputNextEntry(ZipEntry e)de classe JarOutputStream. Seul le package sera abordé ci-dessous java.util.jar. Pour convertir tous les exemples afin d'utiliser une archive zip, remplacez simplement Jar par Zip partout dans le code.

  5. 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

  6. Pourquoi sont-ils nécessaires Properties?

    Propertiesest un fichier de propriétés. Sa structure : clé – valeur. Pour travailler avec de tels fichiers, Java a une classe Properties, elle est héritée deHashTable<Object, Object>

    Il y a un article sur sa manipulation - Exemples de fichiers de propriétés Java

  7. Sous quelle forme les données sont-elles stockées dans le fichier .properties?

    La clé est le sens.

  8. Est-il possible de modifier les données d'un objet Propertiesaprè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 cela setProperty.

    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

  9. Зачем нужен класс 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 предназначен для считывания потоков символов.

  10. Зачем нужен класс 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) специально ориентированы для работы с текстом и строками.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION