파일
파일은 "파일"및 "Directory PathName"의 추상 표현입니다.
파일은 객체에서 직접 상속되어 직렬화 가능한 인터페이스와 비슷한 인터페이스를 구현합니다. 직렬화 가능한 인터페이스를 구현한다는 것은 파일 객체가 직렬화 작업을 지원한다는 것을 의미합니다. 비슷한 인터페이스를 구현한다는 것은 파일 객체의 크기가 될 수 있음을 의미합니다. 파일은 순서 세트 (예 : TreeSet 및 Treemap)에 직접 저장할 수 있습니다.
1. 새로운 디렉토리를 만드는 일반적인 방법
방법 1 : 상대 경로를 기반으로 새 디렉토리를 만듭니다.
샘플 코드는 다음과 같습니다 (현재 경로에서 새 디렉토리 "dir"를 만듭니다) :
파일 dir = 새 파일 ( "dir"); dir.mkdir ();
방법 2 : 절대 경로를 기반으로 새 디렉토리를 만듭니다.
샘플 코드는 다음과 같습니다 (새 디렉토리 만들기 "/home/skywang/dir") :
파일 dir = 새 파일 ( "/home/skywang/dir"); dir.mkdirs ();
참고 : 위는 Linux 시스템에서 새로운 디렉토리 "/Home/Skywang/Dir"의 소스 코드입니다. Windows에서 새 디렉토리 "d :/dir"를 만들려면 소스 코드는 다음과 같습니다.
file dir = 새 파일 ( "d :/dir"); dir.mkdir ();
방법 3
uri uri = new uri ( "file :/home/skywang/dir"); 파일 dir = 새 파일 (uri); sub.mkdir ();
참고 : 완전한 경로가 "방법 2"에 전달되는 것을 제외하고 "방법 2"와 유사하지만, 전체 경로는 "메소드 3"에서 전달된다는 점을 제외하고는 전체 경로에 해당하는 URI입니다.
2. 새로운 서브 디렉토리를 생성하는 몇 가지 일반적인 방법. 예를 들어, 현재 디렉토리의 하위 디렉토리 "Dir"아래에 새 하위 디렉토리를 작성하려고합니다. 여러 가지 방법이 있습니다.
방법 1
file sub1 = 새 파일 ( "dir", "sub1"); sub1.mkdir ();
참고 : 위의 방법의 기능은 현재 디렉토리의 "dir/sub1"입니다. 정상적으로 실행할 수있는 전제는 "sub1"의 상위 디렉토리 "dir"가 이미 존재한다는 것입니다!
방법 2
파일 sub2 = 새 파일 (dir, "sub2"); sub2.mkdir ();
참고 : 위의 방법의 기능은 현재 디렉토리의 "Dir/Sub2"입니다. 정상적으로 실행할 수있는 전제는 "sub2"의 부모 디렉토리 "dir"가 이미 존재한다는 것입니다!
방법 3
파일 sub3 = 새 파일 ( "dir/sub3"); sub3.mkdirs ();
참고 : 위의 방법의 기능은 현재 디렉토리의 "DIR/SUB3"입니다. DIR이 존재할 필요는 없으며 정상적으로 실행할 수 있습니다. "sub3"의 상위 경로가 존재하지 않으면 mkdirs () 메소드는 부모 디렉토리를 자동으로 생성합니다.
방법 4
파일 sub4 = 새 파일 ( "/home/skywang/dir/sub4"); sub4.mkdirs ();
참고 : 위의 방법의 기능은 새 디렉토리 "/home/skywang/dir/sub3"을 만드는 것입니다. DIR이 존재할 필요는 없으며 정상적으로 실행할 수 있습니다. "sub4"의 상위 경로가 존재하지 않으면 mkdirs () 메소드는 부모 디렉토리를 자동으로 생성합니다.
방법 5
uri uri = new uri ( "file :/home/skywang/dir/sub5"); 파일 sub5 = 새 파일 (uri); sub5.mkdirs ();
참고 : 완전한 경로가 "메소드 4"로 전달되는 것을 제외하고 "방법 4"와 유사하게, 완전한 경로는 "메소드 5"로 전달되고 완전한 경로에 해당하는 URI가 전달된다.
3. 새 파일을 만드는 몇 가지 일반적인 방법
예를 들어, 현재 디렉토리 "dir"의 서브 디렉토리 아래에서 새 파일을 만들려는 것입니다. 몇 가지 방법이 있습니다 1
try {file dir = 새 파일 ( "dir"); // 디렉토리에 해당하는 파일 객체를 가져옵니다. "dir"파일 파일 1 = 새 파일 (dir, "file1.txt"); file11.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 ( "파일 : /home/skywang/dir/file4.txt"); 파일 4 = 새 파일 (URI); file4.createnewfile ();} catch (ioexception e) {e.printstacktrace ();} 설명 :
"방법 3"과 유사하게, 완전한 경로가 "메소드 3"에 전달된다는 점을 제외하고, 전체 경로는 "메소드 4"에서 전달된다.
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 class filetest {public static void main (String [] args) {testFilestaticFields (); testfiledirapis (); } public static void testfilestaticfields () {// path path separator ":"system.out.printf ( "file.pathseparator =/"%s/"/n", file.pathseparator); // Path Path Separator ':'System.out.printf ( "file.pathseparatorchar =/"%c/"/n", file.pathseparatorchar); // delimiter "/"system.out.printf 인쇄 ( "file.separator =/"%s/"/n", file.separator); // delimiter '/'system.out.printf 인쇄 ( "file.separatorchar =/"%c/"/n", file.separator); // delimiter '/'system.out.printf 인쇄 ( "file.separatorchar =/"%c/"/n", file.separatorchar); } public static void testFileDirapis () {try {// 새 디렉토리 만들기 "dir"파일 dir = 새 파일 ( "dir"); dir.mkdir (); // 메소드 1 : 새 디렉토리 작성 "dir/sub1". 부모 디렉토리 "Dir"는 이미 존재해야합니다! file sub1 = 새 파일 ( "dir", "sub1"); sub1.mkdir (); // 메소드 2 : 새 디렉토리 작성 "dir/sub2". 부모 디렉토리 "Dir"는 이미 존재해야합니다! 파일 sub2 = 새 파일 (dir, "sub2"); sub2.mkdir (); // 메소드 3 : 새 디렉토리 작성 "dir/sub3". mkdirs ()는 존재하지 않는 상위 디렉토리를 자동으로 만듭니다. 파일 sub3 = 새 파일 ( "dir/sub3"); sub3.mkdirs (); // 메소드 4 : 새 디렉토리 작성 "dir/sub4". "절대 경로"에 따라 생성 된 첫 번째 3 가지 방법은 "상대 경로"를 기반으로 작성됩니다. 문자열 dirpath = dir.getabsolutepath (); // "dir"string sub4abspath = dirpath + file.separator + "sub4"의 절대 경로를 가져옵니다. // file.separator는 Delimiter "/"file sub4 = new File (sub4abspath); sub4.mkdirs (); // 메소드 5 : 새 디렉토리 만들기 "dir/sub5". uri string에 따르면 uri_sub5_path = "파일 :" + dirpath + file.separator + "sub5"; uri uri_sub5 = new uri (uri_sub5_path); 파일 sub5 = 새 파일 (uri_sub5); sub5.mkdirs (); // 메소드 1 : 새 파일 만들기 "dir/l1_normal.txt"파일 l1_normal = 새 파일 (dir, "l1_normal.txt"); l1_normal.createnewfile (); // 메소드 2 : 새 파일을 만듭니다 "dir/.l1_hide.txt". file l1_hide = 새 파일 ( "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 = 새 파일 (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 string uri_path = "파일에 따라 새 파일을 만듭니다 :" + 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 = 새 파일 (uri_l1); l1_uri.createnewfile (); // 새 파일 만들기 "dir/sub/s1_normal"파일 s1_normal = 새 파일 (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는/"%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의 하위 디렉토리가 아닌 디렉토리 DIR만을 가로지게됩니다! System.out.println ( "--- 목록 파일 및 폴더 ----"); file [] fs = dir.listfiles (); for (file f : fs) {String fname = f.getName (); 문자열 absstr = f.isabsolute ()? "[절대]": ""; 문자열 hiddenstr = f.ishidden ()? "[[숨겨진]": ""; 문자열 dirstr = f.isdirectory ()? "[디렉토리]": ""; 문자열 filest = f.isfile ()? "[파일]": ""; System.out.printf ( "%-30s%s%s%s%s/n", fname, filest, dirstr, absstr, hiddenstr); }} catch (예외 e) {e.printstacktrace (); }} private static string getModifyTime (Long Millis) {// 캘린더 개체 캘린더 cal = calendar.getInstance (); // millis cal.settimeinmillis (millis)로 시간을 설정합니다. // 형식의 객체를 가져 오면 "yyyy-mm-dd hh : mm : sss"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 () = true s1_normal.getname () = s1_normal.txt s1_normal.getparent () = dir/sub1_normal.gget _ dir/sub1/s1 _ dir1/spath. s1_normal.getabsolutepath () = /home/skywang/wind_talker/workout/java/skywang/io/src/file/dir/sub1/s1_normal.txt s1_normal.getCanonicalPath () = /home/skywang/wind_talker/workout/java/skywang/io/io/src/file/dir/sub1/s1_normal.txt s1_normal.lastModified () = 1381730064000은 "2013-10-14 13:54:24"S1_NMAL.TOURI () 파일 : /home/skywang/wind_talker/workout/java/skywang/io/io/io/src/file/dir/sub1/s1_normal.txt --- 목록 파일 및 폴더 ----- l1_uri.txt [file] suptory] l1_abs.txt [file] subtory] subtory]. [file] [Hidden] sub3 [directory] sub2 [directory] l1_normal.txt [파일]
결과 : 프로그램을 실행할 때 소스 파일이있는 디렉토리, 하위 디렉토리 및 하위 파일에서 새 디렉토리 "DIR"이 생성됩니다. 아래 그림과 같이 :
제출자
Filedescriptor는 "파일 설명 자"입니다.
Filedescriptor는 열린 파일, 열린 소켓 등을 나타내는 데 사용될 수 있습니다.
FiledEscriptor의 파일을 나타내려면 : FiledEscriptor가 파일을 나타낼 때 FiledEdescriptor를 파일로 간단히 고려할 수 있습니다. 그러나 우리는 파일에서 Filedescriptor를 통해 직접 작동 할 수 없습니다. Filedescriptor를 통해 파일에서 작동 해야하는 경우 Filedescriptor에 해당하는 파일 OutputStream을 작성한 다음 파일에서 작동해야합니다.
In, Out, Err 소개
(1) IN- 표준 입력 용 설명자 (키보드)
(2) 아웃 - 표준 출력 용 설명 자 (화면)
(3) ERR- 표준 오류 출력 (화면)의 설명자는 원칙과 사용으로 유사합니다. 외출을 통해 심층적 인 연구를 수행합시다.
1.1 Out의 역할과 원칙
Out은 표준 출력 (화면)의 설명 자입니다. 그러나 그것은 무엇을합니까?
표준 출력 (화면)을 나타내는 간단한 방식으로 이해할 수 있습니다. 화면에 정보를 출력하려면 정보를 통해 정보를 작동시킬 수 있습니다. 그러나 OUT는 화면에 정보를 출력하는 인터페이스를 제공하지 않습니다 (Out은 본질적으로 FiledEscriptor 객체이기 때문에 Filedescriptor에는 출력 인터페이스가 없기 때문입니다). 무엇을해야합니까?
매우 간단합니다. Out에 해당하는 "출력 스트림 객체"를 작성한 다음 "출력 스트림"의 write ()와 같은 출력 인터페이스를 통해 정보를 화면에 출력합니다. 다음 코드 :
{fileoutputStream out = new FileOutputStream (filedescriptor.out)을 시도합니다. out.write ( 'a'); out.close ();} catch (ioexception e) {} 위의 프로그램을 실행하면 문자 'A'가 화면에서 출력됩니다.
작업을 용이하게하기 위해 Java는 "화면의 정보를 쉽게 출력 할 수있는 인터페이스"를 오랫동안 캡슐화했습니다.
따라서 위의 프로그램을 다음 코드로 동등하게 변환 할 수 있습니다.
System.out.print ( 'A');
위의 두 코드의 원칙에 대해 이야기하여 Out의 정의를 확인해 봅시다. 정의는 filedescriptor.java에 있으며 관련 소스 코드는 다음과 같습니다.
공개 최종 클래스 제출자 {private int fd; 공개 정적 최종 제출자 out = New Filedescriptor (1); 개인 제출자 (int fd) {this.fd = fd; usecount = new atomicinteger (); } ...} 이것으로부터 볼 수 있습니다
(1) OUT은 제출자 개체입니다. 생성자 제출자 (int fd)를 통해 생성됩니다.
(2) 제출 된 스크립터 (int fd) 작동 : FD 객체 (int type)에 값을 지정하고 usecount를 사용하여 새 카운트 변수를 만듭니다.
FD 객체는 매우 중요한 변수입니다. "FD = 1"은 "표준 출력"을 나타내고 "FD = 0"은 "표준 입력"을 나타내고 "FD = 2"는 "표준 오류 출력"을 나타냅니다.
fileoutputStream out = 새 FileOutputStream (filedescriptor.out);
생성자 FileOutputStream (FiledEscriptor FDOBJ)을 사용하여 "FileD.out.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"; 개인 정적 최종 문자열 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을 만듭니다. // 화면에서 "hi filedescriptor"출력 .println (OutText); out.close (); } /*** filedescriptor 작성 샘플 프로그램* (1) 설명하기 위해, "파일 이름으로 파일 아웃 스 스트림 만들기"는 "파일 디스크립터 별 파일 OutputStream 만들기"객체* (2) 프로그램이 "소스 파일"이있는 디렉토리에 새 파일 "File.txt"를 생성하고 파일 내용이 "AA"입니다. */ private static void testWrite () {try {// 파일에 해당하는 파일 OutStream 개체 작성 "file.txt"FileOutputStream out1 = new FileOutputStream (filename); // "file.txt"filedescriptor fdout = out1.getfd (); // "FileOutputStream"객체를 만듭니다. "File Descriptor"FileOutputStream out2 = 새 FileOutputStream (FDOUT); out1.write ( 'a'); // out1 out2.write ( 'a')를 통해 'a'a 'a'to "file.txt"를 씁니다. // out2 if (fdout! = null) system.out.printf ( "fdout ( %s)는 %s/n", fdout, fdout.valid ()); out1.close (); out2.close (); } catch (ioexception e) {e.printstacktrace (); }} / *** filedescriptor 읽기 샘플 프로그램** "파일 이름으로 fileInputStream 만들기"를 설명하려면 "파일 이름으로 fileInputStream 만들기"객체* / private static void testRead () {// 파일에 해당하는 fileInputStream 객체 "fileInputStream in1 = new FileInputStream (filEname); // 파일 "file.txt"filedescriptor fdin = in1.getfd ()에 해당하는 "File Descriptor"를 가져옵니다. // "FileInputStream"객체를 만듭니다. "File Descriptor"FileInputStream in2 = 새 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)은 %s/n", fdin, fdin.valid ()); in1.close (); in2.close (); } catch (ioexception e) {e.printstacktrace (); }}} 실행 결과 :
fdout (java.io.filedescriptor@2b820dda)는 truein1.read () : ain2.read () : afdin (java.io.filedescriptor@675b7986)은 truehi filedescriptor입니다