-
Bisakah suatu objek
File
berhubungan 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 salahFile
mewarisi dariobject
. Jawaban: ya! Saya menunggu komentar Anda. -
Bagaimana cara mengonversi objek
File
menjadi tipePath
?metode
toPath();
toPath(); //Returns a java.nio.file.Path object constructed from the this abstract path.
-
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 -Path
danFiles
.Path
- ini sebenarnya adalah analog baru dari kelas tersebutFile
, danFiles
- ini adalah kelas utilitas (dengan analogi denganArrays
& kelasCollections
), semua metode statis kelas telah ditransfer ke sanaFile
. Ini “lebih tepat” dari sudut pandang OOP.MBeberapa 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. -
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.zip
danjava.util.jar
masing-masing untuk arsip zip dan jar. Perbedaan format jar dan zip hanya terletak pada ekstensi arsip zipnya. Sebuah paketjava.util.jar
mirip dengan paketjava.util.zip
, kecuali implementasi konstruktor dan metodevoidputNextEntry(ZipEntry e)
kelasJarOutputStream
. Hanya paketnya yang akan dibahas di bawah inijava.util.jar
. Untuk mengonversi semua contoh agar menggunakan arsip zip, cukup ganti Jar dengan Zip di mana pun dalam kode. -
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
-
Mengapa mereka dibutuhkan
Properties
?Properties
adalah file properti. Strukturnya: kunci – nilai. Untuk bekerja dengan file seperti itu, Java memiliki kelasProperties
yang diwarisinyaHashTable<Object, Object>
Ada artikel tentang memanipulasinya - Contoh file Java Properties
-
Dalam bentuk apa data disimpan dalam file
.properties
?Kuncinya adalah maknanya.
-
Apakah mungkin untuk mengubah data dalam suatu objek
Properties
setelah memuatnya dari file?Jika diwarisi dari
HashMap
, maka Anda bisa, hanya saja Anda perlu membatalkan perubahan pada file ini. Ada metode untuk inisetProperty
.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 -
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
InputStreamReader
membangunnyaFileInputStream
.FileReader
dirancang untuk membaca aliran karakter. -
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
) специально ориентированы для работы с текстом и строками.
DefNeo
Level 36
GO TO FULL VERSION