JavaRush /Java Blog /Random-ID /Level 31. Jawaban pertanyaan wawancara pada topik level
DefNeo
Level 36

Level 31. Jawaban pertanyaan wawancara pada topik level

Dipublikasikan di grup Random-ID
Level 31. Jawaban pertanyaan wawancara tentang topik level - 1
  1. Bisakah suatu objek Fileberhubungan dengan file yang belum ada?

    Ya, jika Anda meneruskan nilai direktori ke konstruktor.

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

    Hal ini dilakukan, misalnya, untuk mendapatkan serangkaian file.

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

    Keluaran:

    benar salah

    Filemewarisi dari object. Jawaban: ya! Saya menunggu komentar Anda.

  2. Bagaimana cara mengonversi objek Filemenjadi tipe Path?

    metodetoPath();

    toPath(); //Returns a java.nio.file.Path object constructed from the this abstract path.
  3. Mengapa kelas Files diperlukan?

    Kami mengambil kelas sebagai dasar File, menambahkan sedikit sesuatu yang baru ke dalamnya, mengganti nama metode, dan pada akhirnya membaginya menjadi dua. Jadi sekarang ada dua kelas baru - Pathdan Files.

    Path- ini sebenarnya adalah analog baru dari kelas tersebut File, dan Files- ini adalah kelas utilitas (dengan analogi dengan Arrays& kelas Collections), semua metode statis kelas telah ditransfer ke sana File. Ini “lebih tepat” dari sudut pandang OOP.M

    Beberapa dari dokumen:

    public final class Files
    extends Object

    Kelas ini secara eksklusif terdiri dari metode statis yang beroperasi pada file, direktori, atau jenis file lainnya.
    Dalam kebanyakan kasus, metode yang ditentukan di sini akan didelegasikan ke penyedia sistem file terkait untuk melakukan operasi file.

  4. Kelas pengarsipan apa yang Anda ketahui?

    Artikel bagus tentang topik ini dan kutipan darinya: Pengarsipan di Java

    Ada dua paket dalam spesifikasi Java untuk bekerja dengan arsip - java.util.zipdan java.util.jarmasing-masing untuk arsip zip dan jar. Perbedaan format jar dan zip hanya terletak pada ekstensi arsip zipnya. Sebuah paket java.util.jarmirip dengan paket java.util.zip, kecuali implementasi konstruktor dan metode voidputNextEntry(ZipEntry e)kelas JarOutputStream. Hanya paketnya yang akan dibahas di bawah ini java.util.jar. Untuk mengonversi semua contoh agar menggunakan arsip zip, cukup ganti Jar dengan Zip di mana pun dalam kode.

  5. Bagaimana cara menambahkan direktori ke arsip?

    Bagi saya sendiri, saya memahami pertanyaan ini sebagai menambahkan direktori kosong ke arsip yang sudah jadi. Saya tidak menemukan contoh yang berfungsi. Ini kodenya: (Ini jelas menunjukkan bahwa Anda dapat memasukkan file apa pun ke dalam arsip, tetapi dengan direktori kosong... Saya tidak tahu bagaimana menjawabnya, saya tidak memposting di StackOverFlow, pertanyaan seperti itu pasti akan terjadi downvoted) Jika ada yang punya saran, tulislah.

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

    Pertanyaannya adalah tentang testDir terakhir, JVM tidak memasukkannya ke dalam arsip yang dihasilkan, dengan semua file txt lainnya berfungsi dengan baik.

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

    Kode dari sini

  6. Mengapa mereka dibutuhkan Properties?

    Propertiesadalah file properti. Strukturnya: kunci – nilai. Untuk bekerja dengan file seperti itu, Java memiliki kelas Propertiesyang diwarisinyaHashTable<Object, Object>

    Ada artikel tentang memanipulasinya - Contoh file Java Properties

  7. Dalam bentuk apa data disimpan dalam file .properties?

    Kuncinya adalah maknanya.

  8. Apakah mungkin untuk mengubah data dalam suatu objek Propertiessetelah memuatnya dari file?

    Jika diwarisi dari HashMap, maka Anda bisa, hanya saja Anda perlu membatalkan perubahan pada file ini. Ada metode untuk ini setProperty.

    Berikut kodenya:

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

    Keluaran:

    ddfdfdfdfdf

  9. Mengapa kita memerlukan kelas FileReader?

    Dokumen Java:

    public class FileReader
    extends InputStreamReader

    Kelas kenyamanan untuk membaca file karakter. Konstruktor kelas ini berasumsi bahwa pengkodean karakter default dan ukuran buffer byte default sudah sesuai. Untuk menentukan sendiri nilai-nilai ini, buat InputStreamReader pada FileInputStream.

    FileReader dimaksudkan untuk membaca aliran karakter.

    Kelas untuk membaca simbol file. Konstruktor kelas ini berasumsi bahwa pengkodean karakter default dan ukuran buffer default sudah sesuai. Untuk menetapkan nilai-nilai ini sendiri, Anda harus InputStreamReadermembangunnya FileInputStream. FileReaderdirancang untuk membaca aliran karakter.

  10. Mengapa kita memerlukan kelas FileWriter?

    public class FileWriter
    extends OutputStreamWriter

    Kelas kenyamanan untuk menulis file karakter. Konstruktor kelas ini berasumsi bahwa pengkodean karakter default dan ukuran buffer byte default dapat diterima. Untuk menentukan sendiri nilai-nilai ini, buat OutputStreamWriter pada FileOutputStream.

    Tersedia atau tidaknya suatu file dapat dibuat bergantung pada platform yang mendasarinya. Beberapa platform, khususnya, mengizinkan file dibuka untuk ditulis hanya oleh satu FileWriter (atau objek penulisan file lainnya) dalam satu waktu. Dalam situasi seperti ini, konstruktor di kelas ini akan gagal jika file yang terlibat sudah terbuka. FileWriter dimaksudkan untuk menulis aliran karakter.

    Класс для записи символов файлов. Конструкторы этого класса предполагают, что codeировка символов дефолтная и дефолтный размер буфера являются приемлемым. Whatбы задать эти значения самостоятельно, следует построить OutputStreamWriter над FileOutputStream. Является ли файл доступен для записи, зависит от используемой платформы. Некоторые платформы разрешают держать файл для записи только одним FileWriter (or другого an object записи file), в одно время. FileWriter предназначен для записи потоков символов. Для написания потоков необработанных byteов, используйте FileOutputStream.

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

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