Java는 파일에서 한 줄씩 읽습니다. 주요 메소드 준비

거의 모든 프로그래밍 대회는 파일에서 무언가를 읽고 조작을 수행한 다음 결과를 다른 파일에 쓰는 콘솔 프로그램으로 작동합니다. 그리고 많은 사람들이 평범하다. 콘솔 프로그램같은 원리로 작업하십시오. 여기서는 이를 수행하는 방법을 살펴보겠습니다.

동일한 올림피아드에서는 "올바른"코드를 작성할 시간이 거의 없기 때문에 코드가 최소한의 공간을 차지하도록 파일에서 읽고 파일에 쓰는 매우 간단한 방법을 고려할 것입니다. 물론 실제 애플리케이션에서는 많은 검사, 예외 처리 등을 제공해야 합니다.

파일

다음 내용(추가해야 하는 숫자)으로 input.txt 파일을 만듭니다.

그리고 빈 파일출력.txt.

프로젝트 폴더에 넣으세요:

주요 메소드 준비

예외 처리에 신경 쓸 필요가 없도록 기본 메서드에 대해 throws IOException 행을 작성합니다.


Alt + Enter를 통해 해당 가져오기를 연결합니다.


파일에서 읽기

파일에서 데이터를 읽을 수 있습니다 다른 방법들: 문자 단위, 비트 단위, 전체 등. 제 생각에는 가장 쉬운 방법은 파일의 모든 줄을 한 번에 줄 배열로 읽어온 다음 필요에 따라 이 줄 배열을 처리하는 것입니다.

이 작업은 다음과 같이 수행할 수 있습니다.

목록 line = Files.readAllLines(Paths.get("input.txt"), Charset.defaultCharset());

목록< String >라인 = 파일. readAllLines (경로 . get ( "input.txt" ) , Charset . defaultCharset () ) ;

Alt + Enter를 사용하여 모든 패키지를 연결하는 것을 잊지 마십시오.


이제 라인 배열에는 파일의 모든 라인이 포함됩니다. 이제 원하는 대로 처리하세요. 예를 들어, 루프를 통해 모든 라인을 통과할 수 있습니다.

For (String x:lines) ( //필요에 따라 모든 라인을 처리합니다)

for(문자열 x : 행)

//필요에 따라 모든 라인을 처리합니다.

하지만 우리의 경우에는 두 개의 숫자가 포함된 줄이 두 개만 있다는 것을 미리 알고 있습니다. 따라서 단순히 라인 배열에서 두 라인을 읽고 이를 숫자로 변환합니다.

int a = Integer.parseInt(lines.get(0)); int b = Integer.parseInt(lines.get(1));


파일에 쓰기

이제 결과를 파일에 써야 합니다.

먼저 텍스트 변수에 저장하려는 내용을 작성해 보겠습니다.

문자열 텍스트 = Integer.toString(c);

문자열 텍스트 = 정수. toString(c);

이제 이 변수를 필요한 파일에 저장해 보겠습니다.

PrintWriter out = new PrintWriter("output.txt"); out.println(텍스트); 종료.닫기();

PrintWriter out = 새 PrintWriter( "output.txt" ) ;

밖으로 . println(텍스트);

밖으로 . 닫다();

프로그램의 최종 텍스트:

패키지 com.company; import java.io.IOException; import java.io.PrintWriter; import java.nio.charset.Charset; java.nio.file.Files 가져오기; import java.nio.file.Paths; java.util.List 가져오기; 공용 클래스 Main( public static void main(String args)에서 IOException이 발생함( List line = Files.readAllLines(Paths.get("input.txt"), Charset.defaultCharset()); int a = Integer.parseInt(lines.get(0)); int b = Integer.parseInt(lines.get(1)); int c = a + b; 문자열 텍스트 = Integer.toString(c); PrintWriter out = new PrintWriter("output.txt"); out.println(텍스트); 종료.닫기(); ) )

패키지컴. 회사;

자바를 가져옵니다. io. IO예외;

자바를 가져옵니다. io. 프린트라이터 ;

자바를 가져옵니다. 아니요. 문자셋. 문자셋 ;

자바를 가져옵니다. 아니요. 파일. 파일;

자바를 가져옵니다. 아니요. 파일. 경로 ;

Java에서 파일의 내용을 읽는 것은 쉽지 않습니다. 많은 수의기사의 이전 예에서 이미 본 템플릿 코드 텍스트 파일 읽기. FileInputStream을 BufferedReader 안에 넣거나 이상한 종료 조건이 있는 루프를 정의하는 등 많은 작업을 위한 래퍼를 만들어야 했습니다. JDK 7 이후로 상황이 크게 개선되었습니다. JDK는 파일 및 해당 경로 작업을 위해 파일 및 경로와 같은 유용한 클래스를 많이 제공합니다. 이 기사에서는 한 줄의 코드를 사용하여 파일에서 정보를 읽는 방법을 배웁니다. 물론 프로덕션 코드는 다르게 보일 것입니다. 특히 여러 기가바이트의 데이터를 메모리로 읽고 인코딩을 고려하려는 경우에는 더욱 그렇습니다. 인코딩을 선택하지 않은 경우 기본 플랫폼 인코딩. 간단히 말해서 코드가 조금 더 필요하지만 파일을 빠르고 대략적으로 읽으려면 이 방법이면 충분합니다. 그런데 코드에 예외 처리도 포함되어 있으면 여러 줄이 필요합니다. 완성된 프로덕션 애플리케이션에서는 사용자에게 오류 메시지 표시, 메트릭 전송, 오류 로깅 등을 통해 파일이 누락된 상황을 고려해야 하지만 어떤 경우에도 많은 작업이 수행됩니다. 귀하의 경우 평소보다 상용구 코드가 적습니다.

Java 8은 스트림 API를 활용하는 새로운 메소드 세트를 통해 개발자의 삶을 더 쉽게 만들었습니다. 또한 Files.readAllLines()와 같은 사용자 정의 플랫폼 인코딩 대신 항상 UTF-8을 사용하는 몇 가지 새로운 메서드가 Files 클래스에 추가되었습니다. 이 방법은 파일의 모든 줄을 읽습니다. 파일의 바이트는 UTF-8 인코딩을 사용하여 문자로 해독됩니다. 방법은 동일합니다 자바 방식 7 Files.readAllLines(경로, StandardCharsets.UTF_8). 그건 그렇고, 다음과 같은 경우에는 항상 문자 인코딩을 명시적으로 지정하십시오. 바이트 배열을 문자열로 변환끈. 읽고 있는 파일이 다음 형식인 경우에도 항상 인코딩을 명시적으로 지정하세요. 이 순간영어만 포함되어 있습니다.

한 줄의 코드가 포함된 파일 읽기 자바7과 8

다음은 단 한 줄의 코드로 파일을 완전히 읽는 방법을 보여주는 Java 프로그램의 예입니다. 이 예에서는 새로운 수업 JDK 1.7에 도입된 파일인 java.nio.file.Files 클래스에는 많은 내용이 포함되어 있습니다. 유용한 방법예를 들어, Java에서 파일 작업을 위해 파일이 숨겨져 있는지 확인, 또는 읽기 전용인지 여부. Files.readAllBytes(Path) 명령을 사용하여 전체 파일을 메모리로 읽어올 수 있습니다. 이 메소드는 String 생성자에 전달되어 생성할 수 있는 바이트 배열을 반환합니다. 문자열 문자열. 또한 모든 바이트를 읽은 후 또는 I/O 오류 또는 기타 처리되지 않은 예외가 발생한 경우 파일이 제대로 닫히도록 보장합니다. 즉, 상용구 코드를 작성할 필요가 없습니다. 주목해야 할 점은 이 방법읽기에 적합하지 않음 대용량 파일, 힙에 충분하지 않은 경우 자유 공간, 메모리가 부족할 수 있습니다. 또한 바이트 배열을 문자열로 변환할 때 문자 인코딩을 명시적으로 지정해야 합니다. 불쾌한 놀라움또는 구문 분석 오류.

파일을 문자열로 읽으려면 readAllLines(Path path, Charset cs)라는 다른 메서드를 사용할 수 있습니다. 이 방법은 이전 방법과 유사합니다. 또한 읽은 후 또는 오류가 발생한 경우 파일을 닫지만, 바이트 배열 대신 지정된 문자 집합을 사용하여 바이트에서 변환된 문자열을 반환합니다. 또한 Java 8에는 Charset 매개변수가 필요하지 않고 UTF-8을 사용하여 바이트를 문자열로 변환하는 이 메서드의 또 다른 오버로드가 추가되었습니다.

재미는 거기서 끝나지 않습니다. 당신이 원한다면 파일을 한 줄씩 읽기, UTF-8 인코딩을 사용하여 바이트를 문자로 변환하여 파일에서 읽은 줄 스트림을 반환하는 Files.lines() 메서드를 사용할 수 있습니다. 사용 forEach 메소드()를 사용하면 세 번째 코드 조각에서 설명한 것처럼 Java 코드 한 줄만으로 파일의 모든 줄을 콘솔에 인쇄할 수 있습니다.

수입 java.io.IOException; 수입 수입 java.nio.file.Files; 수입 java.nio.file.Paths; 수입 java.util.List; /** * Java에서 텍스트 파일을 문자열로 읽어들이는 간단한 Java 프로그램입니다. *이것을 사용하시면 됩니다 짧막 한 농담 코드빠르게 읽기 파일과*를 문자열로 표시합니다. * @작가재빈 폴 */공개 수업 Java78파일읽기예제( 공공 정적 무효메인(문자열 인수) 던진다 IO예외(시스템. 밖으로 .println( 새로운문자열(파일. readAllBytes(경로. 얻다("data_old.txt")))); 체계. 밖으로 .println( 새로운문자열(파일. readAllBytes(경로. 얻다("info.xml")))); // Java 8 예제 - UTF-8 문자 인코딩을 사용합니다.목록 라인 = 파일. readAllLines(경로. 얻다("data_old.txt"), StandardCharsets. UTF_8 ); 스트링빌더 sb = 새로운스트링빌더(1024); ~을 위한(문자열 라인: 라인) ( sb.append(line); ) String fromFile = sb.toString(); 체계. 밖으로 .println( "++++++++++++++++++++++++" ); 체계. 밖으로 .println( "Java에서 파일을 읽어서 생성된 문자열"); 체계. 밖으로 .println(from파일); 체계. 밖으로 .println( "++++++++++++++++++++++++" ); ) 출력: Java 7 및 Java 8에서는 파일을 문자열로 읽는 것이 매우 쉬워졌습니다. Société Générale은 프랑스 일드프랑스에 있는 프랑스 은행 본사입니다. ++++++++++++++++++++++++ Java Java 7 및 Java에서 파일을 읽어 생성된 문자열 8에서는 파일을 문자열로 읽는 것이 매우 쉬워졌습니다. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

아래와 같이 Java에서 정적 가져오기를 사용하면 코드를 더 짧게 만들 수 있습니다.

정적 가져오기 java.lang.System. 밖으로 ; 정적 가져오기 java.nio.file.파일. readAllBytes; 정적 가져오기 java.nio.file.Paths.get; /** * 자바 클래스한 줄로 파일을 읽으려면 */공개 수업파일인투스트링( 공공 정적 무효메인(문자열 인수) 던진다예외( 밖으로 .println( 새로운끈( readAllBytes(얻다("data_old.txt")))); } }

Java 8을 사용하는 경우 다음 예제와 같이 더 간결하고 성능이 뛰어난 코드를 작성할 수 있는 Stream API를 활용할 수도 있습니다. 여기서 line() 메소드는 UTF-8 인코딩을 사용하여 파일에서 읽은 바이트를 문자로 변환하는 문자열 스트림을 반환합니다. 이는 Java 7에서 Files.lines(path, StandardCharsets.UTF_8) 메서드를 호출하는 것과 동일합니다.

패키지시험; 수입 java.io.IOException; 수입 java.nio.charset.StandardCharsets; 수입 java.nio.file.Files; 수입 java.nio.file.Paths; /** * Stream을 사용하여 Java 8에서 파일을 읽는 방법을 보여주는 Java 프로그램입니다. * @author Javin Paul */공개 수업 Java8파일리더( 공공 정적 무효메인(문자열 인수) 던진다 IO예외( // 안에자바8 당신은 사용할 수 있습니다스트림그리고 추가적인 최적화를 위해 파일. 윤곽(경로. 얻다("매니페스트.mf"), StandardCharsets. UTF_8 ).forEach(시스템. 밖으로 ::println); ) )

그것이 텍스트를 읽거나 읽기 위해 알아야 할 전부입니다. 바이너리 파일 Java 7에서는 코드 한 줄로 가능합니다. 보시다시피 새로운 파일 도구 JDK 7의 API와 Java 8의 Stream API는 Java 파일에서 데이터를 읽는 작업을 크게 단순화했습니다. 이를 통해 우리는 상용구 코드를 완전히 제거하여 훨씬 더 이해하기 쉽고 간결한 코드를 만들 수 있었습니다. 그런데 파일에서 정보를 읽는 프로덕션 코드를 작성하는 경우 다음 사항에 주의하는 것을 잊지 마십시오.

  • 파일이 너무 커서 메모리에 맞지 않을 수 있으므로 읽기 전에 크기를 주의 깊게 살펴보고 파일을 읽을 수 없는 상황을 고려하십시오.
  • 파일을 읽을 수 없는 이유나 읽기 프로세스 중에 발생한 오류에 대한 모든 메시지를 기록해 두십시오.
  • 바이트를 문자로 읽을 때 항상 문자 인코딩을 지정하십시오.
  • 파일이 누락되었을 수 있으므로 이 상황도 고려해야 한다는 점을 기억하세요.

파일 클래스 java.io 패키지에 정의된 은 스레드와 직접 작동하지 않습니다. 그 임무는 파일과 디렉터리에 대한 정보를 관리하는 것입니다. 수준이긴 하지만 운영 체제파일과 디렉토리는 다르지만 Java에서는 동일한 File 클래스로 설명됩니다.

File 객체가 파일을 나타내야 하는지 아니면 디렉터리를 나타내야 하는지에 따라 생성자 중 하나를 사용하여 객체를 만들 수 있습니다.

File(문자열 디렉토리_경로) File(문자열 디렉토리_경로, 문자열 파일_이름) File(파일 디렉토리, 문자열 파일_이름)

예를 들어:

// File 디렉토리에 대한 File 객체를 생성합니다. dir1 = new File("C://SomeDir"); // File 디렉터리에 있는 파일에 대한 개체를 만듭니다. file1 = new File("C://SomeDir", "Hello.txt"); 파일 file2 = new File(dir1, "Hello2.txt");

File 클래스에는 파일과 디렉터리를 관리할 수 있는 다양한 메서드가 있습니다. 그 중 일부를 살펴보겠습니다:

    부울 createNewFile() : 생성합니다. 새로운 파일생성자에게 전달되는 경로를 따라. 생성이 성공하면 true를 반환하고 그렇지 않으면 false를 반환합니다.

    boolean delete() : 생성자에 전달된 경로에서 디렉터리나 파일을 삭제합니다. 삭제에 성공하면 true를 반환합니다.

    boolean presents() : 생성자에 지정된 경로에 파일이나 디렉터리가 존재하는지 확인한다. 파일이나 디렉터리가 존재하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

    String getAbsolutePath() : 객체 생성자에 전달된 경로의 절대 경로를 반환합니다.

    String getName() : 파일이나 디렉터리의 짧은 이름을 반환합니다.

    String getParent() : 상위 디렉토리의 이름을 반환합니다.

    부울 isDirectory() : 반환 진실, 만약에 지정된 경로디렉토리가 위치합니다

    boolean isFile() : 지정된 경로에 파일이 있으면 true를 반환합니다.

    boolean isHidden() : 디렉터리나 파일이 숨겨져 있으면 true를 반환합니다.

    long length() : 파일 크기를 바이트 단위로 반환합니다.

    long lastModified() : 시간을 반환합니다. 마지막 변경파일이나 디렉토리. 값은 Unix 시대가 시작된 이후 경과된 밀리초 수를 나타냅니다.

    String list() : 특정 디렉터리에 있는 파일 및 하위 디렉터리의 배열을 반환합니다.

    File listFiles(): 특정 디렉터리에 있는 파일 및 하위 디렉터리의 배열을 반환합니다.

    부울 mkdir() : 생성 새 카탈로그그리고 에 성공적인 창조 true를 반환합니다.

    boolean renameTo(File dest) : 파일이나 디렉터리의 이름을 바꿉니다.

카탈로그 작업

File 객체가 디렉토리를 나타내는 경우 해당 isDirectory() 메서드는 true 를 반환합니다. 그래서 우리는 그 내용을 얻을 수 있습니다 - 중첩된 하위 디렉터리와 파일은 다음을 사용하여 얻을 수 있습니다. 목록 방법() 및 listFiles() . 특정 디렉터리의 모든 하위 디렉터리와 파일을 가져옵니다.

java.io.파일 가져오기; public class FilesApp ( public static void main(String args) ( // 디렉토리에 대한 객체 정의 File dir = new File("C://SomeDir"); // 객체가 디렉토리를 나타내는 경우 if(dir.isDirectory( )) ( / / 디렉토리에 있는 모든 중첩 객체를 가져옵니다. for(파일 항목: dir.listFiles())( if(item.isDirectory())( System.out.println(item.getName() + " \tdirectory") ; ) else( 시스템 .out.println(item.getName() + "\tfile");

이제 삭제, 이름 바꾸기, 생성과 같은 디렉터리 작업을 수행해 보겠습니다.

java.io.파일 가져오기; public class FilesApp ( public static void main(String args) ( // 파일 디렉토리에 대한 객체 정의 dir = new File("C://SomeDir//NewDir"); booleancreated = dir.mkdir(); if( Created) System.out.println("디렉토리가 성공적으로 생성되었습니다."); // 디렉터리 이름을 바꿉니다. File newDir = new File("C://SomeDir//NewDirRenamed") // 디렉터리 삭제 boolean delete = newDir . delete(); if(deleted) System.out.println("디렉토리가 삭제되었습니다." ) )

파일 작업

파일 작업은 디렉토리 작업과 유사합니다. 예를 들어 파일 중 하나에 대한 데이터를 가져오고 다른 파일을 만들어 보겠습니다.

java.io.파일 가져오기; import java.io.IOException; public class FilesApp ( public static void main(String args) ( // 파일 디렉토리에 대한 객체 정의 myFile = new File("C://SomeDir//somepicture.png"); System.out.println("파일 이름 : " + myFile.getName()); System.out.println("상위 디렉터리: " + myFile.getParent()); if(myFile.exists()) System.out.println("파일이 존재합니다."); out.println("파일이 아직 생성되지 않았습니다."); System.out.println("파일 크기: " + myFile.length()) if(myFile.canRead()) System.out.println("The 파일을 읽을 수 있습니다. "); else System.out.println("파일을 읽을 수 없습니다."); if(myFile.canWrite()) System.out.println("파일을 쓸 수 있습니다."); else System.out.println ("파일을 쓸 수 없음"); // 새 파일 만들기 File newFile = new File("C://SomeDir//MyFile") try ( boolean Created = newFile.createNewFile(); if(created) System.out .println ("파일 생성됨"); catch(IOException ex)( System.out.println(ex.getMessage()); ) ) )

새 파일을 생성할 때 createNewFile() 메서드는 실패할 경우 IOException을 발생시키므로 위의 예에서처럼 try...catch 블록 등에서 이를 포착해야 합니다.

이전에 설명한 클래스를 사용하면 파일에 텍스트를 쓸 수 있지만 해당 클래스의 기능은 다음과 같습니다. 본격적인 작업와 함께 텍스트 파일부족한. 그리고 이를 위해 상속인인 완전히 다른 클래스가 사용됩니다. 추상 수업독자와 작가.

녹음 파일. FileWriter 클래스

FileWriter 클래스는 Writer 클래스에서 파생됩니다. 텍스트 파일을 작성하는 데 사용됩니다.

FileWriter 객체를 생성하려면 다음 생성자 중 하나를 사용할 수 있습니다.

FileWriter(파일 파일) FileWriter(파일 파일, 부울 추가) FileWriter(FileDescriptor fd) FileWriter(문자열 파일 이름) FileWriter(문자열 파일 이름, 부울 추가)

따라서 파일 경로를 문자열로 지정하거나 특정 텍스트 파일을 참조하는 File 객체가 생성자에 전달됩니다. 추가 매개변수는 파일 끝에 데이터를 추가해야 하는지(매개변수가 true인 경우), 아니면 파일을 덮어써야 하는지 여부를 지정합니다.

파일에 텍스트를 작성해 보겠습니다.

java.io.* 가져오기; public class FilesApp ( public static void main(String args) ( try(FileWriter Writer = new FileWriter("C:\\SomeDir\\notes3.txt", false)) ( // 전체 줄 쓰기 String text = "Mom washing 액자, 엄마가 비누 액자를 씻어주셨어요.";writer.write(text); //문자로 쓰기writer.append("\n");writer.append("E");writer.flush(); ) catch( IOException ex)( System.out.println(ex.getMessage());

생성자는 값이 false인 추가 매개변수를 사용했습니다. 즉, 파일을 덮어씁니다. 그런 다음 Writer 기본 클래스에 정의된 메서드를 사용하여 데이터가 기록됩니다.

파일을 읽는 중입니다. FileReader 클래스

FileReader 클래스는 다음에서 상속됩니다. 추상 수업 Reader이며 텍스트 파일을 읽는 기능을 제공합니다.

FileReader 객체를 생성하려면 해당 생성자 중 하나를 사용할 수 있습니다.

FileReader(문자열 파일 이름) FileReader(파일 파일) FileReader(FileDescriptor fd)

그리고 기본 Reader 클래스에 정의된 메서드를 사용하여 파일을 읽습니다.

java.io.* 가져오기; 공용 클래스 FilesApp( public static void main(String args)( try(파일 독자 독자= new FileReader("C:\\SomeDir\\notes3.txt")) ( // int c 문자를 문자별로 읽습니다. while((c=reader.read())!=-1)( System.out.print (( char)c); ) ) catch(IOException ex)( System.out.println(ex.getMessage()); ) )

수업 파일패키지 java.io파일 및 디렉터리에 대한 정보를 관리하는 데 사용됩니다. 운영 체제 수준에서 파일과 디렉터리는 상당한 차이가 있지만 Java에서는 하나의 클래스로 설명됩니다. 파일. Java의 디렉토리는 다음과 같이 처리됩니다. 일반 파일, 그러나 추가 속성 - 메소드를 사용하여 볼 수 있는 파일 이름 목록 목록.

물건의 목적에 따라 파일- 파일이나 디렉터리의 경우 생성자 중 하나를 사용하여 객체를 생성할 수 있습니다.

파일(문자열 path_to_directory); 파일(문자열 디렉토리_경로, 문자열 파일_이름); File(파일 디렉터리, 문자열 파일 이름);

File 객체 생성의 예

// 디렉토리에 파일을 생성합니다. File dir = new File("C://dir_test"); // File 디렉터리에 있는 파일에 대한 파일을 생성합니다. file1 = new File("C://dir_test", "Hello1.txt"); File file2 = new File(dir, "Hello2.txt");

파일 클래스의 속성 및 메서드

클래스에서 표준 파일 속성을 정의하려면 파일다양한 방법이 있습니다. 그러나 File 클래스는 비대칭입니다. 객체의 속성을 결정하는 방법은 존재하지만 이러한 속성을 변경하는 해당 기능이 없습니다.

기능설명
문자열 getName()파일 또는 디렉터리의 이름입니다.
문자열 getParent()상위 디렉터리의 이름입니다.
긴 길이()파일 크기를 바이트 단위로 결정하는 함수입니다.
문자열 getAbsolutePath()판정 기능 절대 경로파일이나 디렉토리.
부울 삭제()파일이나 디렉터리를 삭제합니다.
부울이 존재합니다()파일이나 디렉터리가 있는지 확인합니다.
부울 isDirectory()확인 중 이 개체목록.
부울 isFile()주어진 객체가 파일인지 확인합니다.
긴 마지막 수정()파일이 마지막으로 수정된 날짜를 확인하는 기능입니다.
부울 canRead()파일에서 데이터를 읽을 수 있는지 확인합니다.
부울 canWrite()파일에 데이터를 쓸 수 있는지 확인합니다.
부울 isHidden()디렉터리나 파일이 숨겨져 있는지 확인합니다.
문자열 목록()파일 이름 및 하위 디렉터리 배열을 읽습니다.
파일 목록파일()일련의 파일 및 하위 디렉터리를 읽습니다.
부울 mkdir()새 디렉토리를 생성합니다.
부울 renameTo(파일 대상)파일이나 디렉터리의 이름을 바꿉니다.

다음 예에서는 "d:/test/MyFile.txt"(Windows) 파일을 열고 해당 특성을 추출합니다.

java.io.파일을 가져옵니다. 공용 클래스 FileTest ( public static void main(String args) ( File fl = new File("d:\\test\\MyFile.txt"); System.out.println("파일 이름: " + fl .getName() ); System.out.println("경로: " + fl.getPath()); 전체 경로: " + fl.getAbsolutePath()); System.out.println ("상위 디렉터리: " + fl.getParent()); System.out.println (fl.exists() ? "파일이 존재합니다." : "파일이 있습니다. 존재하지 않습니다. "); System.out.println (fl.canWrite() ? "속성 - 쓸 수 있음" : "속성 - 쓸 수 없음"); System.out.println (fl.canRead() ? "속성 - 읽을 수 있음" : " 속성 - 읽을 수 없음"); System.out.println ("디렉토리입니까? " + (fl.isDirectory() ? "yes": " no")); System.out.println ("이 파일은 일반 파일입니까? " + ( fl.isFile() ? "yes" : "no")); System.out.println("파일의 마지막 수정: " + fl.lastModified()); out.println("파일 크기: " + fl.length() + "바이트");

다음 정보가 콘솔에 인쇄됩니다.

파일 이름: MyFile.txt 경로: d:\test\MyFile.txt 전체 경로: d:\test\MyFile.txt 상위 디렉터리: d:\test 파일이 있음 속성 - 쓸 수 있음 속성 - 읽을 수 있음 디렉터리입니까? ? 아니요 일반 파일인가요? 예 마지막 파일 수정: 1441710053162 파일 크기: 12바이트

파일필터 인터페이스

수업 파일특정 파일의 목록만 읽는 방법이 포함되어 있습니다.

공용 파일 목록파일(FileFilter 필터)

매개변수가 없는 동일한 이름의 방법과 달리 이 방법은 특정 조건을 만족하는 디렉터리 파일만 선택합니다. 필터 매개변수는 이 조건을 설정하기 위한 것입니다. 이 경우 매개변수 유형은 파일필터- 클래스는 아니지만 파일이 특정 조건을 만족하면 true를, 그렇지 않으면 false를 반환하는 메서드가 하나만 있는 인터페이스입니다.

공개 부울 수락(파일 경로 이름)

방법 목록파일디렉터리의 각 파일에 대해 accept 메서드를 호출하고, accept가 true를 반환하는 파일은 결과 목록에 포함됩니다. 나머지는 무시됩니다.

사용하기위한 파일필터객체를 생성하고 그에 상응하는 메소드를 정의해야 합니다 수용하다.

클래스 필터는 FileFilter ( String ext; Filter(String ext) ( this.ext = ext.split(","); ) private String getExtension(File pathname) ( String filename = pathname.getPath(); int i = filename을 구현합니다. lastIndexOf("."); if ((i > 0) && (i< filename.length()-1)) { return filename.substring(i+1).toLowerCase(); } return ""; } public boolean accept(File pathname) { if (!pathname.isFile()) return false; String extension = getExtension(pathname); for (String e: ext) { if (e.equalsIgnoreCase(extension)) return true; } return false; } }

FileFilter 필터 사용 예

java.io.파일을 가져옵니다. import java.io.FileFilter; public class FileTest ( public static void main(String args) ( // 파일 디렉터리 정의 dir = new File("."); // 읽기 전체 목록디렉토리 파일 파일 lst1 = dir.listFiles(); // 확장자가 "png" 및 "jpg"인 디렉터리 파일 목록 읽기 File lst2 = dir.listFiles(new Filter("png,jpg")); System.out.println("lst1.length = " + lst1.length + ", lst2.length = " + lst2.length); ) )

FileInputStream 파일의 내용 읽기

파일의 내용을 읽으려면 클래스를 사용할 수 있습니다 파일입력스트림는 InputStream 클래스의 상속자이며 모든 메서드를 구현합니다. FileInputStream 클래스의 생성자:

FileInputStream(String fileName)이 FileNotFoundException을 발생시킵니다.

파일을 열 수 없으면 FileNotFoundException이 발생합니다.

파일에서 데이터를 읽고 내용을 콘솔에 출력하는 예:

java.io.FileInputStream 가져오기; 공용 클래스 FilesApp ( public static void main(String args) ( try ( FileInputStream fis = new FileInputStream("C:\\test_dir\\test.txt"); System.out.println("파일 크기: " + fis.available () + " 바이트"); int i = -1; while((i = fis.read()) != -1)( System.out.print((char)i); ) fis.close (); ) catch(IOException e)( System.out.println(e.getMessage()); ) )

바이트 버퍼 = 새 바이트; // 파일을 버퍼로 읽습니다. fis.read (buffer, 0, fis.available()); System.out.println("파일 내용:"); for(int i = 0; 나는< buffer.length; i++){ System.out.print((char)buffer[i]); }

수업 파일입력스트림주로 바이너리 파일 작업을 위해 설계되었습니다. 텍스트 파일 작업에 사용할 수 있지만 이 작업에는 다른 클래스가 더 적합합니다.

사용예 파일입력스트림 UTF-8 인코딩으로 속성 파일을 읽으려면 다음을 수행하세요.

UTF-8 인코딩의 속성 파일 "data.properties":

# # SMTP 서버 매개변수 # 회사=뿔과 발굽 관리자=Ostap Bender

예시 목록:

java.io.Reader 가져오기; import java.io.IOException; import java.io.InputStream; import java.io.FileInputStream; import java.io.InputStreamReader; java.util.Properties 가져오기; public class Main ( public static void main(String args) ( try ( InputStream is = new FileInputStream("data.properties"); if (is != null) ( Reader reader = new InputStreamReader(is, "UTF-8") ; 속성 props = new Properties(); System.out.println(props.getProperty("company") + ", " props.getProperty("manager")) ) catch (IOException e ) ( e.printStackTrace(); ) ) )

가입 파일 파일출력스트림

수업 파일출력스트림은 OutputStream 클래스에서 파생되므로 모든 기능을 상속합니다.

파일에 한 줄을 쓰는 예:

java.io.FileOutputStream 가져오기; 공개 클래스 FilesApp( 공개 정적 void main(String args)( 문자열 텍스트 = " 안녕하세요 세상!"; // 쓸 문자열 try ( FileOutputStream fos = new FileOutputStream("C:\\test_dir\\test.txt"); // 문자열을 바이트로 변환 byte buffer = text.getBytes(); fos.write( buffer , 0, buffer.length); ) catch(IOException e)( System.out.println(e.getMessage()); ) )

객체를 생성하려면 파일출력스트림작성할 파일의 경로를 매개변수로 사용하는 생성자가 사용됩니다. 문자열을 쓰려면 먼저 이를 바이트 배열로 변환하고 write 메소드를 사용하여 문자열을 파일에 씁니다. 전체 바이트 배열을 쓸 필요는 없습니다. 메소드 오버로딩 사용 쓰다(), 단일 바이트를 쓸 수도 있습니다.

Fos.write(버퍼); // 첫 번째 바이트만 쓰기

한 파일에서 다른 파일로 콘텐츠를 다시 쓰는 예:

java.io.FileInputStream 가져오기; import java.io.FileOutputStream; 공용 클래스 FilesApp ( public static void main(String args) ( try ( FileInputStream fis = new FileInputStream("C:\\test_dir\\test.txt"); FileOutputStream fos = new FileOutputStream("C:\\test_dir\\new .txt"); byte buffer = new byte; // 버퍼 읽기 fis.read(buffer, 0, buffer.length); // 버퍼에서 파일 fos.write(buffer, 0, buffer.length)에 쓰기 ; fis.close(); fos.close(); ) catch(IOException e)( System.out.println(e.getMessage()); )

수업 파일출력스트림주로 녹음을 목적으로 함 바이너리 파일. 텍스트 파일 작업에 사용할 수 있지만 이 작업에는 다른 클래스가 더 적합합니다.



질문이 있으신가요?

오타 신고

편집자에게 전송될 텍스트: