ファイル
ファイルは、「ファイル」と「ディレクトリパス名」の抽象表現です。
ファイルはオブジェクトから直接継承され、シリアル化可能なインターフェイスと同等のインターフェイスを実装します。シリアル化可能なインターフェイスを実装することは、ファイルオブジェクトがシリアル化操作をサポートすることを意味します。比較可能なインターフェイスを実装することは、ファイルオブジェクトのサイズにすることができることを意味します。ファイルは、順序付けられたセット(TreesetやTreemapなど)に直接保存できます。
1.新しいディレクトリを作成するための一般的な方法
方法1:相対パスに基づいて新しいディレクトリを作成します。
サンプルコードは次のとおりです(現在のパスの下に新しいディレクトリ「dir」を作成します):
file dir = new file( "dir"); dir.mkdir();
方法2:絶対パスに基づいて新しいディレクトリを作成します。
サンプルコードは次のとおりです(新しいディレクトリ "/home/skywang/dir"を作成します):
file dir = new file( "/home/skywang/dir"); dir.mkdirs();
注:上記は、Linux Systemの下の新しいディレクトリ "/home/skywang/dir"のソースコードです。 Windowsの下で、新しいディレクトリ「D:/dir」を作成する場合、ソースコードは次のとおりです。
file dir = new file( "d:/dir"); dir.mkdir();
方法3
uri uri = new uri( "file:/home/skywang/dir");ファイルdir = new file(uri); sub.mkdir();
注:「方法2」と同様に、「方法2」に完全なパスが渡され、フルパスは「メソッド3」に渡され、フルパスに対応するURIが渡されます。
2.新しいサブディレクトリを作成するためのいくつかの一般的な方法。たとえば、現在のディレクトリのサブディレクトリ「dir」の下に新しいサブディレクトリを作成する必要があります。いくつかの方法があります:
方法1
file sub1 = new file( "dir"、 "sub1"); sub1.mkdir();
注:上記の方法の関数は、現在のディレクトリの「dir/sub1」です。それが正常に実行される前提は、「sub1」の親ディレクトリ「dir」がすでに存在することです!
方法2
file sub2 = new file(dir、 "sub2"); sub2.mkdir();
注:上記の方法の関数は、現在のディレクトリの「dir/sub2」です。それが正常に実行される前提は、「sub2」の親ディレクトリ「dir」がすでに存在することです!
方法3
file sub3 = new file( "dir/sub3"); sub3.mkdirs();
注:上記の方法の関数は、現在のディレクトリの「dir/sub3」です。存在するためにdirを必要とせず、正常に実行できます。 「sub3」の親パスが存在しない場合、mkdirs()メソッドは親ディレクトリを自動的に作成します。
方法4
file sub4 = new file( "/home/skywang/dir/sub4"); sub4.mkdirs();
注:上記の方法の機能は、新しいディレクトリ「/home/skywang/dir/sub3」を作成することです。存在するためにdirを必要とせず、正常に実行できます。 「sub4」の親パスが存在しない場合、mkdirs()メソッドは親ディレクトリを自動的に作成します。
方法5
uri uri = new uri( "file:/home/skywang/dir/sub5");ファイルsub5 = new file(uri); sub5.mkdirs();
注:「方法4」と同様に、完全なパスが「メソッド4」に渡され、完全なパスが「メソッド5」に渡され、完全なパスに対応するURIが渡されます。
3.新しいファイルを作成するためのいくつかの一般的な方法
たとえば、現在のディレクトリ「dir」のサブディレクトリの下に新しいファイルを作成する必要があります。いくつかの方法があります1
try {file dir = new file( "dir"); //ディレクトリ「dir」ファイルfile1 = new file(dir、 "file1.txt")に対応するファイルオブジェクトを取得します。 file1.createNewfile();} catch(ioexception e){e.printstacktrace();}注:上記のコードの関数は、「dir」ディレクトリ(相対パス)に新しいファイル「file1.txt」を作成することです。
方法2
try {file file2 = new file( "dir"、 "file2.txt"); file2.createNewfile();} catch(ioexception e){e.printstacktrace();}注:上記のコードの関数は、「dir」ディレクトリ(相対パス)に新しいファイル「file2.txt」を作成することです。
方法3
try {file file3 = new file( "/home/skywang/dir/file3.txt"); file3.createNewfile();} catch(ioexception e){e.printstacktrace();}注:上記のコードの関数は、新しいファイル「/home/skywang/dir/file3.txt」(絶対パス)を作成することです。これは、Linuxの絶対パスに基づく方法です。 Windowsでは、次のコードを介して新しいファイル「d:/dir/file4.txt」を作成できます。
try {file file3 = new file( "d:/dir/file4.txt"); file3.createNewfile();} catch(ioexception e){e.printstacktrace();}方法4
try {uri uri = new uri( "file:/home/skywang/dir/file4.txt"); file file4 = new file(uri); file4.createNewfile();} catch(ioexception e){e.printstacktrace();}説明:
「方法3」と同様に、完全なパスが「メソッド3」に渡され、フルパスは「メソッド4」に渡されることを除き、フルパスに対応するURIです。
4.ファイルAPIの使用例
ファイルでのAPIの詳細な使用については、サンプルコード(filetest.java)を参照してください。
Import java.io.file; import java.io.ioexception; Import java.net.uri; Import java.util.calendar; import java.text.simpledateformat; public static void main(string [] args){testfilestaticfields(); testfiledirapis(); } public static void testFilestaticFields(){// print path separator ":" system.out.printf( "file.pathseparator =/"%s/"/n"、file.pathseparator); // PATH SEPATERATOR ':' System.out.printf( "file.pathseparatorChar =/"%c/"/n"、file.pathseparatorchar); // delimiter "/" system.out.printf( "file.separator =/"%s/"/n"、file.separator); // delimiter '/' System.out.printfをprintします( "file.separatorchar =/"%c/"/n"、file.separator); // delimiter '/' System.out.printfをprintします( "file.separatorchar =/"%c/"/n"、file.separatorchar); } public static void testfiledirapis(){try {// new Directory "dir" file dir = new file( "dir"); dir.mkdir(); //方法1:新しいディレクトリ「dir/sub1」を作成します。親ディレクトリ「dir」はすでに存在する必要があります! file sub1 = new file( "dir"、 "sub1"); sub1.mkdir(); //方法2:新しいディレクトリ「dir/sub2」を作成します。親ディレクトリ「dir」はすでに存在する必要があります!ファイルsub2 = new file(dir、 "sub2"); sub2.mkdir(); //方法3:新しいディレクトリ「dir/sub3」を作成します。 mkdirs()は、存在しない親ディレクトリを自動的に作成します。ファイルsub3 = new file( "dir/sub3"); sub3.mkdirs(); //方法4:新しいディレクトリ「dir/sub4」を作成します。 「絶対パス」に従って作成された最初の3つの方法は、「相対パス」に基づいて作成されます。文字列dirpath = dir.getabsolutepath(); //「dir」文字列sub4abspath = dirpath + file.separator + "sub4"の絶対パスを取得します。 // file.separatorはdelimiter "/" file sub4 = new file(sub4abspath)です。 sub4.mkdirs(); //方法5:新しいディレクトリ「dir/sub5」を作成します。 uri string uri_sub5_path = "file:" + dirpath + file.separator + "sub5"; uri uri_sub5 = new uri(uri_sub5_path);ファイルsub5 = new file(uri_sub5); sub5.mkdirs(); //方法1:新しいファイル「dir/l1_normal.txt」ファイルl1_normal = new file(dir、 "l1_normal.txt"); l1_normal.createNewfile(); //方法2:新しいファイル「dir/.l1_hide.txt」を作成します。ファイルl1_hide = new file( "dir"、 ".l1_hide.txt"); // linuxで、「。」から始まるファイルが始まります。隠されたファイルです。 l1_hide.createNewfile(); //方法3:新しいファイル「dir/l1_abs.txt」を作成します。文字列dirabspah = dir.getabsolutepath(); // dir string l1_abs_path = dirabspah+file.separator+"l1_abs.txt"の絶対パスを取得します。ファイルl1_abs = new file(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()); //方法4:新しいファイル「dir/l1_uri.txt」を作成します。 URI文字列uri_path = "file:" + dirabspah + file.separator + "l1_uri.txt"; uri uri_l1 = new uri(uri_path); //system.out.printf("uri_l1=%S/N "、l1_abs.getabsolutepath());ファイルl1_uri = new file(uri_l1); l1_uri.createNewfile(); //新しいファイル「dir/sub/s1_normal」ファイルs1_normal = new file(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()); //「dir」ディレクトリに「ファイル」と「フォルダー」をリストします。 //注:dir.listfiles()は、ディレクトリ監督のみを通過し、dirのサブディレクトリではありません! system.out.println( "---リストファイルとフォルダー----"); file [] fs = dir.listfiles(); for(file f:fs){string fname = f.getname(); string absstr = f.isabsolute()? "[絶対]" : ""; string hiddenstr = f.ishdidden()? "[隠れた]" : ""; string dirstr = f.isdirectory()? 「[ディレクトリ]」: "";文字列fileStr = f.isfile()? "[ファイル]" : ""; System.out.printf( "% - 30S%S%S%S%S/N"、fName、FileStr、dirst、absstr、hiddenstr); }} catch(例外e){e.printstacktrace(); }} private static string getModifyTime(long millis){//カレンダーオブジェクトカレンダーcal = calendar.getInstance(); //時間をmillis cal.settimeinmillis(millis)に設定します。 //フォーマットされたオブジェクトを取得すると、「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()); }}ランニング結果(WindowsではなくUbuntu 12.04システムの下で結果を実行してください!):
file.pathseparator = ":" file.pathseparatorChar = ":" file.separator = "/" file.separatorchar = "/" s1_normal.exists()= s1_normal.txt s1_normal.getparent()= dir/sub1 s1_normal.get patter() s1_normal.getabsolutepath()= /home/skywang/wind_talker/workout/java/skywang/io/io/src/file/dir/sub1/s1_normal.txt s1_normal.getcanicalpath()= /home/skywang/wind_talker/workout/java/skywang/io/src/file/dir/sub1/s1_normal.txt s1_normal.lastmodified()= 1381730064000は "2013-10-14 13:54:54:24" S1_normal.toui()= file:/home/skywang/wind_talker/workout/java/skywang/io/src/file/dir/sub1/s1_normal.txt ---リストファイルとフォルダー---- L1_uri.txt [ファイル] sub1 [ディレクトリ] l1_abs. [file] [hidden] sub3 [directory] sub2 [directory] l1_normal.txt [file]
結果:プログラムを実行すると、新しいディレクトリ「dir」がソースファイルが配置されているディレクトリ、そのサブディレクトリ、サブファイルに作成されます。下の図に示すように:
filedeScriptor
FileDeScriptorは「ファイル記述子」です。
FileDeScriptorを使用して、オープンファイル、オープンソケットなどを表すことができます。
filedeScriptorでファイルを表すには:fileDeScriptorがファイルを表す場合、FileDeScriptorをファイルと見なすことができます。ただし、FileDeScriptorを介してファイルで直接操作することはできません。 FileDeScriptorを介してファイルで操作する必要がある場合は、FileDeScriptorに対応するFileOutputStreamを作成してからファイルで操作する必要があります。
in、out、err introduction
(1)in-標準入力の記述子(キーボード)
(2)out-標準出力の記述子(画面)
(3)ERR-標準誤差出力(画面)の記述子は、原則と使用法で類似しています。詳細な調査を行いましょう。
1.1 Outの役割と原則
OUTは、標準出力(画面)の記述子です。しかし、それは何をしますか?
標準出力(画面)を表す簡単な方法で理解できます。画面に情報を出力したい場合は、外出することで操作できます。ただし、OUTは画面に情報を出力するインターフェイスを提供しません(OUTは基本的にFileDeScriptorオブジェクトであり、FileDescriptorには出力インターフェイスがありません)。何をするか?
とても簡単です。 OUTに対応する「出力ストリームオブジェクト」を作成し、「出力ストリーム」のwrite()などの出力インターフェイスを介して情報を画面に出力します。次のコード:
try {fileoutputStream out = new fileoutputStream(filedescriptor.out); out.write( 'a'); out.close();} catch(ioexception e){}上記のプログラムを実行すると、文字「A」が画面に出力されます。
操作を容易にするために、Javaは「画面に情報を簡単に出力できるインターフェイス」を長い間カプセル化してきました。System.Outを使用して、画面に情報を簡単に出力できます。
したがって、上記のプログラムを次のコードに同等に変換できます。
System.out.print( 'a');
上記の2つのコードの原則について、Outの定義を確認しましょう。その定義はfiledescriptor.javaにあり、関連するソースコードは次のとおりです。
Public Final Class FileDeScriptor {private int fd; public static final filededescriptor out = new filedescriptor(1); private filedeScriptor(int fd){this.fd = fd; usecount = new AtomicInteger(); } ...}このことから、それはそれを見ることができます
(1)outは、ファイリングオブジェクトです。 Constructor FileDeScriptor(INT FD)を介して作成されます。
(2)filedeScriptor(int fd)操作:fdオブジェクト(intタイプ)に値を割り当て、usecountを使用して新しいcount変数を作成します。
FDオブジェクトは非常に重要な変数です。 「FD = 1」は「標準出力」を表し、「FD = 0」は「標準入力」を表し、「FD = 2」は「標準エラー出力」を表します。
fileoutputStream out = new fileoutputStream(filedescriptor.out);
Constructor fileoutputStream(filedescriptor fdobj)を使用して、「filed.outに対応するFileOutputStreamオブジェクト」を作成することです。
System.outの定義方法について。 「system.out.println( "Hello World")の詳細な理解を参照できます。
上記の学習を通じて、標準ファイル記述子のストリーム[すなわち、(標準入力)、out(標準誤差出力)、およびerr(標準誤差出力)]のストリームをカスタマイズして、入力/出力関数を完了できることを知っています。ただし、Javaは私たちのために対応するインターフェイスをカプセル化しました。つまり、System.in、System.out、System.errをより便利に使用できます。
さらに、「ファイル」、「ソケット」などのファイル記述子をカスタマイズしてから操作することもできます。次の例コードのtestwrite()、testread()、およびその他のインターフェイスを参照してください。
2。サンプルコード
ソースコードは次のとおりです(filedescriptortest.java):
Import java.io.printStream; Import java.io.filedescriptor; Import java.io.fileinputStream; Import java.io.fileoutputStream; import java.io.ioexception; public class filedescriptortest {private static final string filename = "file.txt"; private static final string outtext = "hi filedescriptor"; public static void main(string [] args){testwrite(); testread(); testStandfd(); //system.out.println(outtext); } /*** filedeScriptor.outのテストプログラム**このプログラムの効果は、system.out.println(outtext)に相当します。 */ private static void testStandfd(){//対応するprintStream printStream out = new PrintStream(new FileOutputStream(fileDescriptor.out)); // output "hi filedeScriptor"画面上のout.println(outtext); out.close(); } /*** filedeScriptor writingサンプルプログラム**(1)「ファイル名によってファイルアウトプットストリームの作成」は、「ファイル記述子によるファイルアウトプットストリームの作成」に相当します*(2)プログラムは、「ソースファイル」があり、ファイルコンテンツが「AA」であるディレクトリに新しいファイル「ファイル」を作成します。 */ private static void testwrite(){try {//ファイル "file.txt" fileoutputStream out1 = new fileoutputStream(filename); //ファイルに対応する「ファイル記述子」を取得します "file.txt" filedeScriptor fdout = out1.getfd(); //「file descriptor」に基づいて「fileoutputStream」オブジェクトを作成しますfileoutputStream out2 = new fileoutputStream(fdout); out1.write( 'a'); // Out1 Out2.Write( 'a')を介して「file.txt」を "a 'to' to" to "to" file.txt "を書き込みます。 // out2(fdout!= null)system.out.printf( "fdout(s)is%s/n"、fdout、fdout.valid())を介して「file.txt」を「file.txt」から書き込みます。 out1.close(); out2.close(); } catch(ioexception e){e.printstacktrace(); }} / *** filedeScriptorサンプルプログラムを読み取るために、「ファイル名でファイルを作成する」は、「ファイル記述子によるファイルプットストリームの作成」と同等です。 //ファイルに対応する「ファイル記述子」を取得します "file.txt" filedeScriptor fdin = in1.getfd(); //「ファイル記述子」FileInputStream in2 = new fileinputStream(fdin)に従って「fileinputStream」オブジェクトを作成します。 system.out.println( "in1.read():"+(char)in1.read()); system.out.println( "in2.read():"+(char)in2.read()); if(fdin!= null)system.out.printf( "fdin(%s)は%s/n"、fdin、fdin.valid()); in1.close(); in2.close(); } catch(ioexception e){e.printstacktrace(); }}}実行結果:
fdout(java.io.filedescriptor@2b820dda)is truen1.read():ain2.read():afdin(java.io.filedescriptor@675b7986)はtruehi filedescriptorです