Latest web development tutorials

자바 스트림 (스트림), 파일 (파일) 및 IO

Java.io 클래스 패키지는 입력 및 출력 요구의 거의 모든 작업을 포함한다. 이러한 스트림의 모든 클래스는 입력 신호와 출력 처를 나타낸다.

그래서 기본 유형, 객체, 현지화 된 문자 세트 : Java.io 패키지 스트리밍과 같은 다양한 형식을 지원합니다.

이는 데이터 스트림의 시퀀스로서 이해 될 수있다. 목표 출력 스트림 소스로부터 데이터를 판독하기 위해 입력 스트림을 나타내는 것은 기록 데이터 나타낸다.

자바는 널리 파일 전송 및 네트워크 프로그래밍에 사용하고, I / O를위한 강력하고 유연한 지원을 제공합니다.

그러나,이 부분은 I / O 관련 기능 가장 기본적이고 스트림을 설명합니다. 우리는 이러한 기능에 대한 예를 통해 배울 것입니다.


콘솔 입력 읽기

System.in 완료 Java 콘솔 입력.

콘솔 구속력 문자 스트림을 획득하기 위하여, 당신은 문자 스트림을 생성하기 위해 오브젝트의 BufferedReader 래핑 System.in를 할 수있다.

여기의 BufferedReader를 만들 수있는 기본 구문은 다음과 같습니다

BufferedReader br = new BufferedReader(new 
                      InputStreamReader(System.in));

의 BufferedReader 객체를 만든 후, 우리는 콘솔에서 문자를 읽거나 문자열 내의 readLine () 메소드를 읽을 수있는 읽기 () 메서드를 사용할 수 있습니다.


콘솔에서 더 많은 문자 입력 읽기

의 BufferedReader 객체에서 읽고 다음과 같은 구문 () 메서드를 읽고 사용할 문자입니다 :

int read( ) throws IOException

각 호출은 입력 스트림에서 문자를 읽고 정수 값으로 문자를 반환 () 메소드를 읽을 수 있습니다. 되면 스트림의 마지막 -1을 리턴한다. 이 방법은 IOException이 발생합니다.

다음 프로그램은 콘솔 사용자가 "q"를 입력 할 때까지 계속에서 사용 읽기 () 메서드는 문자를 읽고 보여줍니다.

// 使用 BufferedReader 在控制台读取字符

import java.io.*;

public class BRRead {
   public static void main(String args[]) throws IOException
   {
      char c;
      // 使用 System.in 创建 BufferedReader 
      BufferedReader br = new BufferedReader(new 
                         InputStreamReader(System.in));
      System.out.println("Enter characters, 'q' to quit.");
      // 读取字符
      do {
         c = (char) br.read();
         System.out.println(c);
      } while(c != 'q');
   }
}

다음과 같은 결과를 컴파일 위의 예는 다음과 같습니다

Enter characters, 'q' to quit.
123abcq
1
2
3
a
b
c
q

콘솔에서 문자열을 읽어

표준 입력에서 읽은 문자열이의 BufferedReader 내의 readLine () 메소드를 사용합니다.

그것의 일반적인 형식은 다음과 같습니다

String readLine( ) throws IOException

당신은 단어 "끝"을 입력 할 때까지 다음 프로그램은 읽고 표시 문자 행.

// 使用 BufferedReader 在控制台读取字符
import java.io.*;
public class BRReadLines {
   public static void main(String args[]) throws IOException
   {
      // 使用 System.in 创建 BufferedReader 
      BufferedReader br = new BufferedReader(new
                              InputStreamReader(System.in));
      String str;
      System.out.println("Enter lines of text.");
      System.out.println("Enter 'end' to quit.");
      do {
         str = br.readLine();
         System.out.println(str);
      } while(!str.equals("end"));
   }
}

다음과 같은 결과를 컴파일 위의 예는 다음과 같습니다

Enter lines of text.
Enter 'end' to quit.
This is line one
This is line one
This is line two
This is line two
end
end

우리는 또한 사용 후 JDK 버전 5 자바 스캐너 입력 콘솔을 얻을 클래스를.

콘솔 출력

그것은 콘솔의 이전 출력에 도입되었다가 인쇄 ()와에 println하여 수행됩니다 (). 클래스의 PrintStream에 의해 정의 된 이러한 방법은, System.out에이 클래스 객체에 대한 참조입니다.

의 PrintStream가의 OutputStream 클래스를 상속하고, 방법 쓰기를 구현 (). 따라서, 쓰기 ()에도 콘솔 쓰기에서 사용할 수 있습니다.

다음의 PrintStream 형식 쓰기 ()의 간단한 정의는 다음과 같습니다

void write(int byteval)

스트림에 기입 byteval이 방법은 옥텟을 낮출 것이다.

다음의 예는 쓰기 () 화면에 개행 문자 출력 다음에 문자 "A"및 사용

import java.io.*;

// 演示 System.out.write().
public class WriteDemo {
   public static void main(String args[]) {
      int b; 
      b = 'A';
      System.out.write(b);
      System.out.write('\n');
   }
}

출력 창에 위의 예 출력 "A"문자를 실행

A

참고 : 인쇄 ()와에 println () 메소드를 사용하는 것이 더 편리하기 때문에 쓰기 () 메서드가 자주 사용되지 않습니다.


읽기와 쓰기 파일

상술 한 바와 같이, 데이터 스트림의 순서로서 정의된다. 데이터를 기록하기위한 목표 출력 스트림 소스로부터 데이터를 판독하는 입력 스트림.

다음은의 클래스 계층도 입력 및 출력 스트림에 대한 설명이다.

다음은 두 가지 중요한 흐름은 FileInputStream에와 FileOutputStream에를하는 논의 될 것이다 :


FileInputStream에

파일에서 데이터를 판독하는 스트림은, 그 목적은 새로운 키워드를 생성 할 수있다.

여러 건설 방법은 객체를 생성하는 데 사용할 수 있습니다.

사용자는 파일을 읽는 입력 스트림 객체를 생성하는 캐릭터 타입의 파일 이름을 사용할 수있다 :

InputStream f = new FileInputStream("C:/java/hello");

또한 입력 파일을 읽을 스트림 객체를 생성하는 파일 객체를 사용할 수 있습니다. 우리는 먼저 파일 객체를 생성하는 파일 () 메소드를 사용해야합니다 :

File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);

InputStream 객체가 생성, 당신은 스트림의 흐름을 읽거나 다른 작업을 수행하기 위해 다음과 같은 방법을 사용할 수 있습니다.

아니오. 방법 및 설명
(1) 공공 무효 가까이는 () {IOException가 슬로우 }
이 파일 입력 스트림을 닫아이 스트림에 관련된 모든 system resource를 해방합니다. IOException이 예외.
보호 무효의 마무리는 () {IOException가 슬로우 }
이 방법은 파일과의 연결을 지 웁니다. 더 이상 가까운 방법 참조 파일 입력 스트림을 호출하지 있는지 확인합니다. IOException이 예외.
3 공공 INT 읽기 (INT r)이 발생 } {IOException가
이 메소드는 InputStream 객체의 데이터의 지정된 바이트를 읽습니다. 그것은 정수 값을 반환합니다. 당신이 -1을 반환 종료해야하는 경우, 데이터의 다음의 바이트를 돌려줍니다.
4 공공 INT의 읽기 (바이트 [] R )} {IOException가 슬로우
이 방법은 상기 입력 스트림으로부터 바이트 r.length 길이를 읽는다. 읽은 바이트 수를 돌려줍니다. 이 파일의 끝이면 -1이 반환된다.
(5) 가능한 공공의 INT는 () {IOException가 슬로우 }
입력 스트림 읽기 바이트의 숫자로 블록하지 않고 입력 스트림에서 다음 메소드 호출을 돌려줍니다. 정수 값을 돌려줍니다.

의 InputStream뿐만 아니라, 자세한 내용은 다른 입력 스트림은 다음 링크를 참조있다 :


FileOutputStream에

이 클래스는 파일 데이터 파일을 생성하고 기록하는 데 사용됩니다.

* 스트림 출력을위한 파일을 여는 경우, 대상 파일은 다음 스트림이 파일을 생성 존재하지 않는다.

생성자 FileOutputStream에 객체를 생성하는 방법은 두 가지가 있습니다.

사용 문자열 출력 스트림 객체를 생성하기 위해 파일 이름을 입력 :

OutputStream f = new FileOutputStream("C:/java/hello") 

또한 파일을 작성하는 출력 스트림을 생성하는 파일 객체를 사용할 수 있습니다. 우리는 먼저 파일 객체를 생성하는 파일 () 메소드를 사용해야합니다 :

File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);

생성되는 OutputStream 객체가 완료하면, 스트림의 흐름을 물품 또는 다른 작업을 수행하기 위해 다음의 방법을 사용할 수있다.

아니오. 방법 및 설명
(1) 공공 무효 가까이는 () {IOException가 슬로우 }
이 파일 입력 스트림을 닫아이 스트림에 관련된 모든 system resource를 해방합니다. IOException이 예외.
보호 무효의 마무리는 () {IOException가 슬로우 }
이 방법은 파일과의 연결을 지 웁니다. 더 이상 가까운 방법 참조 파일 입력 스트림을 호출하지 있는지 확인합니다. IOException이 예외.
3 공공 무효 쓰기 (INT는 w)가 발생 } {IOException가
이 방법은 출력 스트림에 기록 지정된 바이트 걸린다.
4 공공 무효 쓰기 (바이트 [] w )
OutputStream에 기록 지정된 배열 w.length의 바이트 길이.

OutputStream에 추가, 자세한 내용은 다른 출력 스트림은 다음 링크를 참조있다 :

여기에서의 InputStream과 OutputStream에 예문의 데모입니다 :

import java.io.*;

public class fileStreamTest{

   public static void main(String args[]){
   
   try{
      byte bWrite [] = {11,21,3,40,5};
      OutputStream os = new FileOutputStream("test.txt");
      for(int x=0; x < bWrite.length ; x++){
         os.write( bWrite[x] ); // writes the bytes
      }
      os.close();
     
      InputStream is = new FileInputStream("test.txt");
      int size = is.available();

      for(int i=0; i< size; i++){
         System.out.print((char)is.read() + "  ");
      }
      is.close();
   }catch(IOException e){
      System.out.print("Exception");
   }	
   }
}

위의 프로그램은 출력 동안 콘솔, 파일 TEST.TXT 및 문서의 바이너리 형태로 작성, 지정된 번호를 생성합니다.

이 상기 이진 코드로 작성되기 때문에,이 왜곡 될 수 있고, 당신은 쓰레기 문제를 해결하기 위해 다음 코드 예를 사용할 수있다 :

//文件名 :fileStreamTest2.java
import java.io.*;

public class fileStreamTest2{
	public static void main(String[] args) throws IOException {
		
		File f = new File("a.txt");
		FileOutputStream fop = new FileOutputStream(f);
		// 构建FileOutputStream对象,文件不存在会自动新建
		
		OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
		// 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
		
		writer.append("中文输入");
		// 写入到缓冲区
		
		writer.append("\r\n");
		//换行
		
		writer.append("English");
		// 刷新缓存冲,写入到文件,如果下面已经没有写入的内容了,直接close也会写入
		
		writer.close();
		//关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉
		
		fop.close();
		// 关闭输出流,释放系统资源

		FileInputStream fip = new FileInputStream(f);
		// 构建FileInputStream对象
		
		InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
		// 构建InputStreamReader对象,编码与写入相同

		StringBuffer sb = new StringBuffer();
		while (reader.ready()) {
			sb.append((char) reader.read());
			// 转成char加到StringBuffer对象中
		}
		System.out.println(sb.toString());
		reader.close();
		// 关闭读取流
		
		fip.close();
		// 关闭输入流,释放系统资源

	}
}

파일 및 I / O

이 파일에 대한 클래스도 있습니다 및 I / O, 우리는 또한 알고 있어야합니다 :


자바 디렉토리

디렉토리를 만듭니다 :

파일 클래스는 두 가지 방법 폴더를 생성하는 데 사용될 수 있습니다

  • MKDIR () 메소드가 true를 돌려, 성공을 폴더를 만들려면 false를 반환 실패합니다. 실패는 파일 객체에 지정된 경로가 이미 존재하거나, 전체 경로가 존재하지 않기 때문에, 폴더가 생성 될 수 있었다.
  • mkdirs () 메소드는 폴더와 상위 폴더를 모두 만들 수 있습니다.

다음의 예는 "/ tmp를 / 사용자 / 자바 / 빈"폴더를 생성합니다 :

import java.io.File;

public class CreateDir {
   public static void main(String args[]) {
      String dirname = "/tmp/user/java/bin";
      File d = new File(dirname);
      // 现在创建目录
      d.mkdirs();
  }
}

컴파일하고 "/ tmp를 / 사용자 / 자바 / 빈"디렉토리를 작성 위의 코드를 실행합니다.

참고 : 자바 UNIX 및 Windows에 자동으로 합의 된 해상도 파일 경로 구분에 따라. 자바, (/)의 Windows 버전에서 구분 기호를 사용하는 경우, 경로는 여전히 제대로 해결하는 것입니다.


읽기 디렉토리

디렉토리는 실제로 다른 파일 및 폴더를 포함하는 파일 객체입니다.

당신이 File 객체를 생성하고이 디렉토리 인 경우, 통화 isDirectory () 메소드는 true를 돌려줍니다.

개체 목록 () 메서드를 호출하여 파일 및 포함 된 폴더의 목록을 추출합니다.

다음 예는 폴더 내에 포함 된 파일의 내용을 확인하는리스트 () 메소드를 사용하는 방법을 보여준다 :

import java.io.File;

public class DirList {
   public static void main(String args[]) {
      String dirname = "/tmp";
      File f1 = new File(dirname);
      if (f1.isDirectory()) {
         System.out.println( "Directory of " + dirname);
         String s[] = f1.list();
         for (int i=0; i < s.length; i++) {
            File f = new File(dirname + "/" + s[i]);
            if (f.isDirectory()) {
               System.out.println(s[i] + " is a directory");
            } else {
               System.out.println(s[i] + " is a file");
            }
         }
      } else {
         System.out.println(dirname + " is not a directory");
    }
  }
}

다음과 같은 결과를 컴파일 위의 예는 다음과 같습니다

Directory of /tmp
bin is a directory
lib is a directory
demo is a directory
test.txt is a file
README is a file
index.html is a file
include is a directory