Latest web development tutorials

Javaストリーム(ストリーム)、ファイル(ファイル)およびIO

Java.ioクラスパッケージは、入力および出力の必要性のほとんどすべての操作を含みます。 これらのストリームクラスの全ては、入力元と出力先を表します。

ように基本的なタイプ、オブジェクト、ローカライズされた文字セットと:Java.ioパッケージのストリーミングは、以下のような様々なフォーマットをサポートしています。

これは、データのストリームのシーケンスとして理解することができます。 ターゲット出力ストリームにソースからデータを読み取るための入力ストリームを表すことは、データを書き込む表します。

Javaはそれがより広くファイル転送やネットワークプログラミングで使用すること、I / Oのための強力かつ柔軟なサポートを提供しています。

しかし、このセクションでは、最も基本的な、ストリームI / O関連の機能について説明します。 私たちは、これらの関数の例を通して学びます。


コンソール入力を読みます

System.inにより完成Javaコンソール入力。

コンソールへの結合文字ストリームを得るためには、文字のストリームを作成するためにBufferedReaderのオブジェクトでラップはSystem.inができます。

ここではBufferedReaderのを作成するための基本的な構文は次のとおりです。

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

BufferedReaderのオブジェクトが作成された後、私たちは、コンソールから文字を読み取る、または文字列のreadLine()メソッドを読み取るためにread()メソッドを使用することができます。


コンソールから複数の文字入力を読みます

BufferedReaderのオブジェクトから読み取るあなたは、次の構文を持っている()メソッド、読み使用する文字は、次のとおりです。

int read( ) throws IOException

各呼び出しは、入力ストリームから文字を読み込み、整数値として文字を返します()メソッドを、読み取ります。 ときにストリームの最後に-1を返します。 メソッドはIOExceptionがスローされます。

ユーザーは「q」を入力するまで次のプログラムは、使用read()メソッドは、コンソールから文字を読み込み、実証することは継続されます。

// 使用 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 のJavaスキャナ入力コンソールを取得するクラスを。

コンソール出力

これは、コンソールの前の出力に導入されているが、印刷()とのprintlnによって行われます()。 PrintStreamクラスで定義されたこれらのメソッドは、System.outには、クラスオブジェクトへの参照です。

PrintStreamは)(のOutputStreamクラスを継承し、メソッドの書き込みを実装しています。 したがって、書き込みは()も、コンソールの書き込みから使用することができます。

次のようにPrintStreamをフォーマット書き込み()の最も簡単な定義は次のとおりです。

void write(int byteval)

このメソッドは、ストリームに書き込まれたオクテットbytevalが低下します。

次の例では、write()で文字「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()メソッドを使用する方が便利であるため、write()メソッドを頻繁に使用されていません。


ファイルを読み書きします

上述したように、ストリームは、データの配列として定義されます。 データを書き込むためのターゲット出力ストリームにソースからデータを読み取るための入力ストリーム。

以下は、クラス階層図の入出力ストリームの説明です。

:次の2つの重要な流れがの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がスローされます }
このファイル入力ストリームを解放このストリームに関連するすべてのシステムリソースを閉じます。 IOExceptionが発生します。
2 保護されたボイドファイナライズは(){IOExceptionがスローされます }
このメソッドは、ファイルとの接続をクリアします。 もはやそのcloseメソッドのリファレンスファイル入力ストリームを呼び出していないことを確認してください。 IOExceptionが発生します。
3 公共int型の読み取り(int型r)はスロー IOExceptionが{}
このメソッドは、InputStreamオブジェクトからのデータを、指定したバイト数の読み取ります。 これは、整数値を返します。 あなたはそれが-1を返し終了する必要があれば、データの次のバイトを返します。
4 公共int型の読み取りが(バイト[]はR )} {IOExceptionがスローされます
このメソッドは、入力ストリームからバイトr.length長を読み取ります。 読み込んだバイト数を返します。 それはファイルの末尾である場合は-1が返されます。
5 利用可能な公共intは(){IOExceptionがスローされます }
入力ストリームの読み取りからのバイト数によって、ブロックせずにこの入力ストリームの次のメソッド呼び出しを返します。 整数値を返します。

詳細については、以下のリンクを参照するためのInputStreamに加えて、他のいくつかの入力ストリームは、があります。


FileOutputStream

このクラスは、ファイルを作成し、ファイル・データを書き込むために使用されます。

*ストリームが出力用のファイルを開くと、対象ファイルは、ストリームがファイルを作成します、存在しません。

コンストラクタのFileOutputStreamオブジェクトを作成するには、2つの方法があります。

出力ストリームオブジェクトを作成するために、ファイル名を入力した文字列を使用します。

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

また、ファイルを書き込むための出力ストリームを作成するために、ファイルオブジェクトを使用することができます。 私たちは、最初のファイルオブジェクトを作成するファイル()メソッドを使用する必要があります。

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

OutputStreamオブジェクトを作成すると、ストリームの流れを書いたり、他の操作を実行するには、次のメソッドを使用することができ、完了です。

いいえ。 メソッドと説明
1 公共ボイド近い(){IOExceptionがスローされます }
このファイル入力ストリームを解放このストリームに関連するすべてのシステムリソースを閉じます。 IOExceptionが発生します。
2 保護されたボイドファイナライズは(){IOExceptionがスローされます }
このメソッドは、ファイルとの接続をクリアします。 もはやそのcloseメソッドのリファレンスファイル入力ストリームを呼び出していないことを確認してください。 IOExceptionが発生します。
3 公共ボイド書き込み(int型ワット)スロー IOExceptionが{}
このメソッドは、出力ストリームに書き込まれた指定されたバイトを取ります。
4 公共ボイド書き込み(バイト[]ワット
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にもあります。


Javaディレクトリ

ディレクトリを作成します。

ファイルクラスには2つの方法は、フォルダを作成するために使用することができるがあります。

  • フォルダを作成するには、mkdir()メソッド、成功は、trueを返し、それはfalseを返します失敗します。 失敗は、Fileオブジェクト指定されたパスがすでに存在している、または全体のパスが存在しないため、フォルダを作成することはできませんが示されました。
  • mkdirs()メソッドは、フォルダとその親フォルダのすべてを作成します。

次の例では、「/ tmpに/ユーザ/ javaの/ binに "フォルダを作成します。

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 /ユーザー/ javaの/ binに "。

注意:UNIXおよびWindows上のJavaは自動的に合意された解像度のファイル・パスの区切りに応じました。 あなたは、Java、(/)のWindows版で区切り文字を使用する場合は、パスがまだ正しく解決されるべきです。


ディレクトリを読みます

ディレクトリには、実際には他のファイルとフォルダが含まれているFileオブジェクトです。

あなたは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