JavaRush /Blog Java /Random-ES /Nivel 31. Respuestas a las preguntas de la entrevista sob...
DefNeo
Nivel 36

Nivel 31. Respuestas a las preguntas de la entrevista sobre el tema del nivel.

Publicado en el grupo Random-ES
Nivel 31. Respuestas a las preguntas de la entrevista sobre el tema del nivel - 1
  1. ¿ Puede un objeto Filecorresponder a un archivo que aún no existe?

    Sí, si pasa el valor del directorio al constructor.

    String dirPath = "/";
    File f = new File(dirPath);
    File[] files = f.listFiles();

    Esto se hace, por ejemplo, para obtener una serie de archivos.

    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.
    Это из documentoации
            System.out.println(isObject + " "+ isFile);
    
        }
    }

    Salida:

    verdadero falso

    Filehereda de object. Respuesta: ¡sí! Estoy esperando tus comentarios.

  2. ¿ Cómo convertir un objeto Filea tipo Path?

    MétodotoPath();

    toPath(); //Returns a java.nio.file.Path object constructed from the this abstract path.
  3. ¿Por qué se necesita la clase Archivos?

    Tomamos la clase como base File, le agregamos algo nuevo, cambiamos el nombre de los métodos y al final también la dividimos en dos. Ahora hay dos clases nuevas: Pathy Files.

    Path- esto es, de hecho, un nuevo análogo de la clase File, y Files- esta es una clase de utilidad (por analogía con las clases Arrays& Collections), a ella se le han transferido todos los métodos estáticos de la clase File. Esto es "más correcto" desde el punto de vista de OOP.M.

    Algunos de los documentos:

    public final class Files
    extends Object

    Esta clase consta exclusivamente de métodos estáticos que operan en archivos, directorios u otros tipos de archivos.
    En la mayoría de los casos, los métodos definidos aquí delegarán al proveedor del sistema de archivos asociado la realización de las operaciones con el archivo.

  4. ¿Qué clases de archivo conoces?

    Un buen artículo sobre este tema y un extracto del mismo: Archivar en Java

    Hay dos paquetes en la especificación de Java para trabajar con archivos, java.util.zipy java.util.jarrespectivamente para archivos zip y jar. La diferencia entre los formatos jar y zip está sólo en la extensión del archivo zip. Un paquete java.util.jares similar a un paquete java.util.zip, excepto por la implementación de constructores y un método voidputNextEntry(ZipEntry e)de clase JarOutputStream. Sólo el paquete se discutirá a continuación java.util.jar. Para convertir todos los ejemplos para usar un archivo zip, simplemente reemplace Jar con Zip en todas partes del código.

  5. ¿Cómo agregar un directorio a un archivo?

    Por mi parte, entendí esta pregunta como agregar un directorio vacío a un archivo terminado. No encontré ningún ejemplo funcional. Aquí está el código: (Muestra claramente que puedes poner cualquier archivo en el archivo, pero con un directorio vacío... No sé cómo responder, no publiqué en StackOverFlow, esa pregunta definitivamente será votado en contra) Si alguien tiene alguna sugerencia, escriba.

    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 pregunta es sobre el último testDir, la JVM no lo coloca en el archivo resultante, con todos los demás archivos de texto funciona 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();
        }
    }

    Código desde aquí

  6. ¿Por qué son necesarios Properties?

    Propertieses un archivo de propiedades. Su estructura: clave – valor. Para trabajar con este tipo de archivos, Java tiene una clase Properties, se hereda deHashTable<Object, Object>

    Hay un artículo sobre cómo manipularlo: ejemplos de archivos de propiedades de Java

  7. ¿De qué forma se almacenan los datos en el archivo .properties?

    La clave es el significado.

  8. ¿Es posible cambiar los datos de un objeto Propertiesdespués de cargarlo desde un archivo?

    Si se hereda de HashMap, entonces podrá hacerlo, solo entonces deberá desscribir los cambios en este archivo. Hay un método para esto setProperty.

    Aquí está el código:

    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();
                    }
                }
            }
        }
    
    }

    Salida:

    ddfdfdfdfdf

  9. ¿ Por qué necesitamos una clase FileReader?

    Documentos Java:

    public class FileReader
    extends InputStreamReader

    Clase de conveniencia para leer archivos de personajes. Los constructores de esta clase asumen que la codificación de caracteres predeterminada y el tamaño del búfer de bytes predeterminado son apropiados. Para especificar estos valores usted mismo, construya un InputStreamReader en un FileInputStream.

    FileReader está diseñado para leer secuencias de caracteres.

    Clase para leer símbolos de archivos. Los constructores de esta clase asumen que la codificación de caracteres predeterminada y el tamaño del búfer predeterminado son apropiados. Para establecer estos valores usted mismo, debe construir InputStreamReadersobre FileInputStream. FileReaderdiseñado para leer secuencias de caracteres.

  10. ¿ Por qué necesitamos una clase FileWriter?

    public class FileWriter
    extends OutputStreamWriter

    Clase de conveniencia para escribir archivos de caracteres. Los constructores de esta clase asumen que la codificación de caracteres predeterminada y el tamaño del búfer de bytes predeterminado son aceptables. Para especificar estos valores usted mismo, construya un OutputStreamWriter en un FileOutputStream.

    El hecho de que un archivo esté disponible o pueda crearse depende de la plataforma subyacente. Algunas plataformas, en particular, permiten que un archivo se abra para escribirlo con un solo FileWriter (u otro objeto de escritura de archivos) a la vez. En tales situaciones, los constructores de esta clase fallarán si el archivo involucrado ya está abierto. FileWriter está diseñado para escribir secuencias de caracteres.

    Класс для записи символов файлов. Конструкторы этого класса предполагают, что códigoировка символов дефолтная и дефолтный размер буфера являются приемлемым. Quéбы задать эти значения самостоятельно, следует построить OutputStreamWriter над FileOutputStream. Является ли файл доступен для записи, зависит от используемой платформы. Некоторые платформы разрешают держать файл для записи только одним FileWriter (o другого un objetoа записи archivo), в одно время. FileWriter предназначен для записи потоков символов. Для написания потоков необработанных byteов, используйте FileOutputStream.

    Эти классы (FileReader и FileWriter) специально ориентированы для работы с текстом и строками.

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