Mengajukan
File adalah representasi abstrak dari "File" dan "Directory Pathname".
File secara langsung diwariskan dari objek, menerapkan antarmuka serializable dan antarmuka yang sebanding. Menerapkan antarmuka serializable berarti bahwa objek file mendukung operasi serialisasi. Menerapkan antarmuka yang sebanding berarti bahwa objek file dapat berukuran; File dapat disimpan secara langsung dalam set yang dipesan (seperti Treeset dan TreeMap).
1. Metode umum untuk membuat direktori baru
Metode 1: Buat direktori baru berdasarkan jalur relatif.
Kode sampel adalah sebagai berikut (buat direktori baru "dir" di bawah jalur saat ini):
File dir = file baru ("dir"); dir.mkdir (); Metode 2: Buat direktori baru berdasarkan jalur absolut.
Kode sampel adalah sebagai berikut (buat direktori baru "/home/skywang/dir"):
File dir = file baru ("/home/skywang/dir"); dir.mkdirs (); Catatan: Di atas adalah kode sumber dari direktori baru "/home/skywang/dir" di bawah sistem Linux. Di bawah Windows, jika Anda ingin membuat direktori baru "D:/dir", kode sumbernya adalah sebagai berikut:
File dir = file baru ("d:/dir"); dir.mkdir (); Metode 3
Uri uri = Uri baru ("File:/home/skywang/dir"); File dir = file baru (uri); sub.mkdir (); Catatan: Mirip dengan "Metode 2", kecuali bahwa jalur lengkap dilewatkan dalam "Metode 2", sedangkan jalur lengkap dilewatkan dalam "Metode 3" adalah URI yang sesuai dengan jalur lengkap.
2. Beberapa metode umum untuk membuat subdirektori baru. Misalnya, kami ingin membuat subdirektori baru di bawah "dir" subdirektori dari direktori saat ini. Ada beberapa cara:
Metode 1
File sub1 = file baru ("dir", "sub1"); sub1.mkdir (); Catatan: Fungsi metode di atas adalah untuk "dir/sub1" di direktori saat ini. Premis untuk dijalankan secara normal adalah bahwa direktori induk "dir" dari "sub1" sudah ada!
Metode 2
File sub2 = file baru (dir, "sub2"); sub2.mkdir ();
Catatan: Fungsi metode di atas adalah untuk "dir/sub2" di direktori saat ini. Premis untuk dijalankan secara normal adalah bahwa direktori induk "dir" dari "sub2" sudah ada!
Metode 3
File sub3 = file baru ("dir/sub3"); sub3.mkdirs (); Catatan: Fungsi metode di atas adalah untuk "dir/sub3" di direktori saat ini. Itu tidak memerlukan DIR untuk ada dan dapat berjalan secara normal; Jika jalur induk "Sub3" tidak ada, metode MKDIRS () akan secara otomatis membuat direktori induk.
Metode 4
File sub4 = file baru ("/home/skywang/dir/sub4"); sub4.mkdirs (); Catatan: Fungsi metode di atas adalah membuat direktori baru "/home/skywang/dir/sub3". Itu tidak memerlukan dir akan ada, dan dapat berjalan secara normal; Jika jalur induk dari "Sub4" tidak ada, metode mkdirs () akan secara otomatis membuat direktori induk.
Metode 5
Uri uri = Uri baru ("File:/home/skywang/dir/sub5"); File sub5 = file baru (uri); sub5.mkdirs (); Catatan: Mirip dengan "Metode 4", kecuali bahwa jalur lengkap dilewatkan dalam "Metode 4", sedangkan jalur lengkap dilewatkan dalam "Metode 5" dan URI yang sesuai dengan jalur lengkap dilewatkan.
3. Beberapa metode umum untuk membuat file baru
Misalnya, kami ingin membuat file baru di bawah subdirektori direktori saat ini "dir". Ada beberapa metode 1
coba {file dir = file baru ("dir"); // Dapatkan objek file yang sesuai dengan direktori "dir" file file1 = file baru (dir, "file1.txt"); file1.createNewFile ();} catch (ioException e) {e.printstacktrace ();} Catatan: Fungsi kode di atas adalah membuat file baru "File1.txt" di direktori "dir" (jalur relatif).
Metode 2
coba {file file2 = file baru ("dir", "file2.txt"); file2.createNewFile ();} catch (ioException e) {e.printstacktrace ();} Catatan: Fungsi kode di atas adalah membuat file baru "File2.txt" di direktori "dir" (jalur relatif).
Metode 3
coba {file file3 = file baru ("/home/skywang/dir/file3.txt"); file3.createNewFile ();} catch (ioException e) {e.printstacktrace ();} Catatan: Fungsi kode di atas adalah membuat file baru "/home/skywang/dir/file3.txt" (jalur absolut). Ini adalah metode berdasarkan jalur absolut di Linux. Di Windows, Anda dapat membuat file baru "d: /dir/file4.txt" melalui kode berikut.
coba {file file3 = file baru ("d: /dir/file4.txt"); file3.createNewFile ();} catch (ioException e) {e.printstacktrace ();} Metode 4
coba {uri uri = Uri baru ("file: /home/skywang/dir/file4.txt"); File File4 = File Baru (URI); file4.createNewFile ();} catch (ioException e) {e.printstacktrace ();} menjelaskan:
Mirip dengan "Metode 3", kecuali bahwa jalur lengkap dilewatkan dalam "Metode 3", sedangkan jalur lengkap dilewatkan dalam "Metode 4" adalah URI yang sesuai dengan jalur lengkap.
4. Contoh Penggunaan API File
Untuk penggunaan API secara terperinci dalam file, lihat kode contoh (filetest.java):
Impor java.io.file; impor java.io.ioException; import java.net.uri; import java.util.calendar; impor java.text.simpledateFormat; filetest kelas publik {public static void utama (string [] args) {testfilestaticfields (); testfiledirapis (); } public static void testFilestaticFields () {// cetak path pemisah ":" System.out.printf ("File.PathSeparator =/"%s/"/n", file.pathseparator); // cetak path pemisah ':' system.out.printf ("file.pathseparatorchar =/"%c/"/n", file.pathseparatorchar); // Cetak Delimiter "/" System.out.printf ("File.Separator =/"%s/"/n", file.separator); // Cetak Delimiter '/' System.out.printf ("File.separatorchar =/"%c/"/n", file.separator); // Cetak Delimiter '/' System.out.printf ("File.Separatorchar =/"%c/"/n", file.separatorchar); } public static void testFileDirapis () {coba {// Buat direktori baru "dir" file dir = file baru ("dir"); dir.mkdir (); // Metode 1: Buat direktori baru "dir/sub1". Direktori induk "dir" pasti sudah ada! File sub1 = file baru ("dir", "sub1"); sub1.mkdir (); // Metode 2: Buat direktori baru "dir/sub2". Direktori induk "dir" pasti sudah ada! File sub2 = file baru (dir, "sub2"); sub2.mkdir (); // Metode 3: Buat direktori baru "dir/sub3". mkdirs () akan secara otomatis membuat direktori induk yang tidak ada. File sub3 = file baru ("dir/sub3"); sub3.mkdirs (); // Metode 4: Buat direktori baru "dir/sub4". Dibuat menurut "Path Absolute", 3 metode pertama dibuat berdasarkan "jalur relatif". String dirpath = dir.getAbsolutePath (); // Dapatkan jalur absolut dari "dir" string sub4abspath = dirpath + file.separator + "sub4"; // file.separator adalah pembatas "/" file sub4 = file baru (sub4abspath); sub4.mkdirs (); // Metode 5: Buat direktori baru "dir/sub5". Menurut URI String URI_SUB5_PATH = "File:" + Dirpath + File.Separator + "Sub5"; Uri uri_sub5 = Uri baru (uri_sub5_path); File sub5 = file baru (uri_sub5); sub5.mkdirs (); // Metode 1: Buat file baru "dir/l1_normal.txt" file l1_normal = file baru (dir, "l1_normal.txt"); l1_normal.createNewFile (); // Metode 2: Buat file baru "dir/.l1_hide.txt". File l1_hide = file baru ("dir", ".l1_hide.txt"); // Di Linux, file yang dimulai dengan "." adalah file tersembunyi. l1_hide.createNewFile (); // Metode 3: Buat file baru "dir/l1_abs.txt". String dirabspah = dir.getAbsolutePath (); // Dapatkan jalur absolut dari string dir l1_abs_path = dirabspah+file.separator+"l1_abs.txt"; File l1_abs = file baru (l1_abs_path); l1_abs.createNewFile (); //System.out.printf("l1_abs_path=%s/n ", l1_abs_path); //System.out.printf("l1_abs path =%s/n ", l1_abs.getabsolutePath ()); // Metode 4: Buat file baru "dir/l1_uri.txt". Buat file baru sesuai dengan string URI URI_PATH = "File:" + dirabspah + file.separator + "l1_uri.txt"; Uri uri_l1 = Uri baru (uri_path); //System.out.printf("uri_l1=%s/n ", l1_abs.getabsolutePath ()); File l1_uri = file baru (URI_L1); l1_uri.createNewFile (); // Buat file baru "dir/sub/s1_normal" file s1_normal = file baru (sub1, "s1_normal.txt"); s1_normal.createNewFile (); System.out.printf (" %30S = %s/n", "s1_normal.exists ()", s1_normal.exists ()); System.out.printf (" %30S = %s/n", "s1_normal.getName ()", s1_normal.getName ()); System.out.printf (" %30S = %s/n", "s1_normal.getParent ()", s1_normal.getParent ()); System.out.printf (" %30S = %s/n", "s1_normal.getPath ()", s1_normal.getPath ()); System.out.printf (" %30S = %s/n", "s1_normal.getAbsolutePath ()", s1_normal.getAbsolutePath ()); System.out.printf (" %30S = %s/n", "s1_normal.getCanonicalPath ()", s1_normal.getCanonicalPath ()); System.out.printf ("%30S =%s is/"%s/"/n", "s1_normal.lastmodified ()", s1_normal.lastmodified (), getModifytime (s1_normal.lastmodified ())); System.out.printf (" %30S = %s/n", "s1_normal.touri ()", s1_normal.touri ()); // Daftar "file" dan "folder" di direktori "dir". // Catatan: dir.listfiles () hanya akan melintasi direktori dir, bukan subdirektori dir! System.out.println ("--- daftar file dan folder ----"); File [] fs = dir.listfiles (); untuk (file f: fs) {string fname = f.getName (); String absstr = f.isabsolute ()? "[Absolute]": ""; String hiddenstr = f.ishidden ()? "[Tersembunyi]" : ""; String dirstr = f.isdirectory ()? "[Direktori]": ""; String filestr = f.isfile ()? "[File]": ""; System.out.printf ("%-30S%s%s%s%s/n", fname, filestr, dirstr, absstr, hiddenstr); }} catch (Exception e) {e.printstacktrace (); }} private static string getModifyTime (long millis) {// Dapatkan kalender objek kalender cal = calendar.getInstance (); // Tetapkan waktu ke Millis Cal.setTimeInmillis (Millis); // Dapatkan objek yang diformat, itu akan memformat tanggal sesuai dengan "yyyy-mm-dd hh: mm: ss" SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-mm-dd hh: mm: ss"); //System.out.printf("time %s/n ", str); return sdf.format (cal.getTime ()); }} Hasil menjalankan (menjalankan hasil di bawah sistem Ubuntu 12.04, bukan Windows!):
File.pathseparator = ":" file.pathseparatorchar = ":" file.separator = "/" file.separatorchar = "/" s1_normal.exists () = true s1_normal.getname () = s1_normal.txt s1_normal.getparent () () = S1_NORMAL.TXT S1_NORMAL.getParent () () = S1_normal. dir/sub1/s1_normal.txt s1_normal.getAbsolutePath () = /home/skywang/wind_talker/workout/java/skywang/io/src/file/dir/sub1/s1_normal.txt s1_normal.goMal.getath.) /home/skywang/wind_talker/workout/java/skywang/io/src/file/dir/sub1/s1_normal.txt s1_normal.lastmodified () = 1381730064000 adalah "2013-10-14 13:54:54:24" File: /home/skywang/wind_talker/workout/java/skywang/io/src/file/dir/sub1/s1_normal.txt --- daftar file dan folder ---- l1_uri.txt [file] [direkrok] [Direktori] l1_abs.txt] Subory. [File] [tersembunyi] Sub3 [direktori] Sub2 [direktori] l1_normal.txt [file]
Hasil: Saat menjalankan program, direktori baru "dir" akan dibuat di direktori di mana file sumber berada, subdirektori dan subfile -nya. Seperti yang ditunjukkan pada gambar di bawah ini:
FileDescriptor
FileDeScriptor adalah "deskriptor file".
FileDeScriptor dapat digunakan untuk mewakili file terbuka, soket terbuka, dll.
Untuk mewakili file oleh FileDeScriptor: Ketika FileDeScriptor mewakili file, kami dapat dengan mudah menganggap FileDeScriptor sebagai file. Namun, kami tidak dapat beroperasi pada file secara langsung melalui FileDeScriptor; Jika kita perlu beroperasi pada file melalui FileDeScriptor, kita perlu membuat FileOutputStream yang sesuai dengan FileDeScriptor dan kemudian beroperasi pada file.
di, out, erren Pendahuluan
(1) dalam - deskriptor untuk input standar (keyboard)
(2) Out - Deskriptor untuk output standar (layar)
(3) ERR - Deskriptor output kesalahan standar (layar) pada prinsip dan penggunaan yang serupa. Mari kita lakukan penelitian mendalam.
1.1 Peran dan Prinsip Keluar
Out adalah deskriptor untuk output standar (layar). Tapi apa fungsinya?
Kita dapat memahaminya dengan cara sederhana yang keluar mewakili output standar (layar). Jika kami ingin mengeluarkan informasi ke layar, kami dapat mengoperasikannya; Namun, Out tidak menyediakan antarmuka untuk mengeluarkan informasi ke layar (karena Out pada dasarnya adalah objek FILEDESCRIPTOR, dan FileDeScriptor tidak memiliki antarmuka output). Apa yang harus dilakukan?
Ini sangat sederhana. Kami membuat "objek aliran output" yang sesuai dengan out, dan kemudian output informasi ke layar melalui antarmuka output seperti write () dari "output stream". Kode berikut:
coba {fileoutputStream out = FileOutputStream baru (FileDeScriptor.out); out.write ('a'); out.close ();} catch (ioException e) {} Jalankan program di atas dan huruf 'A' akan output di layar.
Untuk memfasilitasi operasi kami, Java telah lama merangkum "antarmuka yang dapat dengan mudah mengeluarkan informasi di layar" untuk kami: melalui System.out, kami dapat dengan mudah mengeluarkan informasi ke layar.
Oleh karena itu, kita dapat secara setara mengonversi program di atas menjadi kode berikut:
System.out.print ('A'); Mari kita bicara tentang prinsip -prinsip dua kode di atas untuk melihat definisi keluar. Definisinya adalah di FileDeScriptor.java, dan kode sumber yang relevan adalah sebagai berikut:
Public Final Class FileDescriptor {private int fd; Public Static Final FileDescriptor out = new FileDeScriptor (1); Private FileDeScriptor (int fd) {this.fd = fd; usecount = atomicinteger baru (); } ...} Dari sini, dapat dilihat itu
(1) Keluar adalah objek FILEDESCRIPTOR. Ini dibuat melalui konstruktor FileDeScriptor (int fd).
(2) FileDeScriptor (int fd) Operasi: Tetapkan nilai ke objek FD (tipe int) dan buat variabel jumlah baru menggunakan Usecount.
Objek FD adalah variabel yang sangat penting. "FD = 1" mewakili "output standar", "fd = 0" mewakili "input standar", dan "fd = 2" mewakili "output kesalahan standar".
FileOutputStream out = FileOutputStream baru (FileDeScriptor.out);
Ini untuk menggunakan konstruktor FileOutputStream (FileDeScriptor FDOBJ) untuk membuat "FileOutputStream objek yang sesuai dengan Filed.out".
Tentang bagaimana system.out didefinisikan. Anda dapat merujuk pada "Pemahaman mendalam tentang System.out.println (" Hello World ")"
Melalui pembelajaran di atas, kami tahu bahwa kami dapat menyesuaikan aliran deskriptor file standar [mis., Dalam (input standar), out (output kesalahan standar), dan err (output kesalahan standar)] untuk menyelesaikan fungsi input/output; Namun, Java telah merangkum antarmuka yang sesuai untuk kami, yaitu, kami dapat menggunakan System.in, System.out, System.err lebih nyaman.
Selain itu, kami juga dapat menyesuaikan deskriptor file untuk "file", "soket", dll., Dan kemudian beroperasi di atasnya. Lihat testwrite (), testRead () dan antarmuka lainnya dalam kode contoh berikut.
2. Kode Sampel
Kode sumber adalah sebagai berikut (FileDeScriptortest.java):
Impor java.io.printstream; import java.io.filedescriptor; import java.io.fileInputStream; import java.io.fileoutputStream; import java.io.ioException; kelas publik FileDescriptortest {private static string filename = "file.txt"; Private Static Final String OutText = "Hi FileDeScriptor"; public static void main (string [] args) {testwrite (); tesread (); teststandfd (); //System.out.println(outText); } /*** Program uji FileDeScriptor.out** Pengaruh program ini setara dengan System.out.println (outText); */ private static void teststandfd () {// Buat printStream printStream out yang sesuai = printStream baru (FileOutputStream baru (FileDescriptor.out)); // output "hi fileDescriptor" di layar out.println (outtext); out.close (); } /*** FileDescriptor Menulis Program Sampel** (1) Untuk mengilustrasikan, "Membuat FileOutputStream dengan nama file" setara dengan "Membuat FileOutputStream oleh File Descriptor" Objek* (2) Program ini akan membuat file baru "File.txt" di direktori di mana "file sumber" berada, dan konten file adalah "aa". */ private static void testWrite () {coba {// Buat objek FileOutputStream yang sesuai dengan file "file.txt" fileOutputStream out1 = FileOutputStream baru (fileName); // Dapatkan "Deskriptor File" yang sesuai dengan file "File.txt" FileDescriptor fdout = out1.getFd (); // Buat objek "FileOutputStream" berdasarkan pada "File Descriptor" FileOutputStream out2 = new FileOutputStream (fdout); out1.write ('a'); // tulis 'a' to "file.txt" melalui out1 out2.write ('a'); // tulis 'a' to "file.txt" melalui out2 if (fdout! = Null) system.out.printf ("fdout ( %s) adalah %s/n", fdout, fdout.valid ()); out1.close (); out2.close (); } catch (ioException e) {e.printstacktrace (); }} / *** FileDeScriptor Baca Program Sampel** Untuk mengilustrasikan, "Buat FileInputStream dengan nama file" setara dengan "Buat FileInputStream oleh File Descriptor" Object* / Private Static Void testRead () {coba {// Buat fileInputStream yang sesuai dengan file. File.txt (fileInputStream (FilePxtsREAM; neenePleam (FileEn (file. // Dapatkan "Deskriptor File" yang sesuai dengan file "File.txt" FileDescriptor fdin = in1.getFd (); // Buat objek "FileInputStream" sesuai dengan "file deskriptor" fileInputStream in2 = new fileInputStream (fdin); System.out.println ("in1.read ():"+(char) in1.read ()); System.out.println ("in2.read ():"+(char) in2.read ()); if (fdin! = null) system.out.printf ("fdin ( %s) adalah %s/n", fdin, fdin.valid ()); in1.close (); in2.close (); } catch (ioException e) {e.printstacktrace (); }}} Hasil Menjalankan:
fdout (java.io.filedescriptor@2b820dda) adalah truein1.read (): ain2.read (): afdin (java.io.filedescriptor@675b7986) adalah Truehi FileDescriptor