basic i o operations java
このビデオチュートリアルでは、Javaユーザー入力、InputStream、Java Printf、PrintlnなどのJava入出力メカニズムと標準I / Oデバイスについて説明します。
すべてのプログラミング言語で、入力データを読み取り、処理されたデータ(出力とも呼ばれる)をエンドユーザーに送信するメカニズムが必要です。
ご存知のように、ソフトウェアの世界には、プログラマーがデータの読み取りやデータの書き込みまたは出力に使用できる多くの入出力デバイスがあります。
私たちを読んでください 完全なJavaトレーニングシリーズ Javaの概念をより深く理解するため。
学習内容:
Javaでの基本的なI / O操作に関するビデオチュートリアル
Javaプログラムを使用すると、さまざまなソースおよび宛先からデータを読み書きできます。 データソースと宛先の読み取りと書き込みには、次のものが含まれます。
- ファイル
- パイプ
- ネットワーク接続
- インメモリバッファ( 例えば: 配列)
- System.in、System.out、System.error
このビデオチュートリアルでは、入力をファイルとして取得し、ファイルからデータを読み取るために使用できるさまざまなクラス、インターフェイス、およびメソッドについて説明します。
Javaでの基本的なIO操作:
Javaファイル操作:
Java I / O(入出力)は、入力を処理して出力を生成する標準メカニズムです。パッケージ「java.io」には、すべての入力および出力操作を実行するためのメソッドが含まれています。
I / O操作をより高速に実行するために、Javaはストリームの概念を使用します。ストリームは、バイトで構成されるデータのシーケンスとして定義できます。
Java I / Oストリームについてもっと学びましょう!!
Javaの標準I / Oストリーム
Java言語は、「System」クラスを使用して、システムリソース、標準の入出力デバイスなどへのアクセスを提供します。このクラスは、さまざまなリソースにアクセスするためのシステム依存のプログラミングインターフェイスを実装します。
Systemクラスは、Javaの「java.lang」パッケージに属しています。 Systemクラスは、標準のI / Oストリームを提供するほかに、環境変数、外部変数、ファイルとライブラリの読み込み、および配列の一部をコピーするためのユーティリティメソッドarrayCopyへのアクセスも提供します。
このチュートリアルは標準I / Oのみに基づいているため、ここではSystemクラスによって提供される残りの機能をスキップします。
入出力の観点から、Systemクラスは次のストリームを提供します。
#1)標準入力ストリーム(System.in)
SystemクラスSystem.inによって提供される入力ストリームは、キーボードなどの標準入力デバイスから入力データを読み取るために使用されます。
ストリームは開いたままで、ユーザーが標準の入力デバイスに提供したデータを読み取る準備ができています。
次の例は、単一の整数桁を読み取るSystem.in.read関数を示しています。
public class Main { public static void main(String args()) throws java.io.IOException { int ch; System.out.println('Enter the character to be displayed : '); ch = System.in.read(); System.out.println('You entered : ' + (char)ch); } }
出力:
#2)標準出力ストリーム(System.out)
SystemクラスのSystem.outインターフェイスは、プログラム出力をモニターなどの標準出力デバイスに書き込むために使用されます。ほとんどの場合、System.outインターフェイスはコマンド出力を標準出力デバイスに書き込みます。
標準出力はこのクラスから派生するため、「PrintStream」クラスの3つのメソッドを使用します。
これらの方法は次のとおりです。
- 印刷
- println
- 書く
メソッド「print」と「println」の機能は同じですが、printlnメソッドが出力に改行文字( n)を追加するという1つの違いがあります。
非ASCIIデータを表示する場合を除いて、書き込み方式はあまり使用されません。
次の例は、System.outストリームを示しています。
public class Main { public static void main(String args()) throws java.io.IOException { String stringType = 'Java Tutorial Series'; char() charTypeArray = { 'a', 'e', 'i', 'o', 'u' }; boolean booleanType = true; int integerType = 10; double doubleType = Math.PI; long longType = Long.MAX_VALUE; float floatType = Float.MIN_VALUE; System.out.println('String::' + stringType); System.out.print('Character::'); System.out.println(charTypeArray); System.out.println('Boolean::' + booleanType); System.out.println('Integer::' + integerType); System.out.println('Double::' + doubleType); System.out.println('Long::' + longType); System.out.println('Float::' + floatType); } }
出力:
上記のプログラムは、System.outインターフェースで使用される「print」および「println」関数を示しています。ここでは、さまざまなデータ型の変数を定義し、System.outインターフェイスを使用してそれぞれを表示しています。
#3)標準エラーストリーム(System.err)
標準エラーストリームであるSystem.errは、プログラムの実行中にエラーがあればそれを表示するために使用されます。
System.outストリームと同様に、エラーストリームもPrintStreamクラスの3つのメソッド、print、println、およびwritesをサポートします。
コンソールから入力を読み取る方法
上記の入力ストリームとは別に、Javaのコンソールから入力データを読み取るために使用できるメソッドは他にもいくつかあります。
これらの方法については、以下で説明します。
#1)クラスBufferedReader
BufferedReaderクラスはJDK1.0で最初に導入され、コンソールから入力データを読み取る古典的な方法です。
入力ストリーム(System.in)は、クラスInputStreamReader内にラップされ、クラスInputStreamReaderはBufferedReaderにラップされます。
次のプログラムは、BufferedReaderクラスを使用してユーザーから入力データを読み取る方法を示しています。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String() args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); System.out.println('Enter the input string'); String name = reader.readLine(); System.out.println('You entered: ' + name); } }
出力:
上記のプログラムでは、System.inストリームに初期化されたBufferedReaderクラスのオブジェクトを宣言しました。このオブジェクトを使用して、入力の行全体を読み取ります。
ご覧のとおり、バッファリングされたデータ全体を読み取ることができるため、この機能は非常に効率的です。唯一の欠点は、毎回覚えるのが難しいかもしれない不可解なコードです。
#2)コンソールクラス
クラス「System.console」は、コンソールからの入力を読み取るために使用できます。これは、特にコマンドラインからパスワードなどの入力文字を読み取るために使用されます。
コンソールクラスを使用して入力データを読み取るメソッドは、現在Javaで最も効率的で推奨されるメソッドです。
次のプログラムは、System.consoleクラスを示しています。
public class Main { public static void main(String() args) { System.out.println('Enter the input string'); String name = System.console().readLine(); System.out.println('You entered: ' + name); } }
出力:
System.consoleクラスを使用すると、文字をエコーせずに入力文字を読み取ることができます。したがって、この方法はパスワードの読み取りに役立ちます。次に、System.out.printf()で使用されているものと同様に、フォーマット文字列を使用して入力データをフォーマットすることもできます。
これは入力データを読み取るための推奨される方法ですが、System.consoleクラスはIDEのようなインタラクティブJava環境では使用できないことに注意してください。
#3)スキャナー
スキャナークラスを使用して入力データを読み取ることは、おそらく最も高速で好ましい方法です。スキャナーは主に、プリミティブ型や文字列などのデータ型を解析するために使用されます。ただし、入力データを読み取り、トークン化された入力を使用して解析するためにも使用できます。
スキャナークラスは、この目的のために正規表現を使用します。
次のプログラムは、スキャナークラスを使用してユーザーから入力データを読み取ります。
import java.util.Scanner; class Main { public static void main(String args()) { Scanner myscan = new Scanner(System.in); System.out.println('Enter the input:'); String mystr = myscan.nextLine(); System.out.println('You entered a string:'+mystr); System.out.println('Enter Next input:'); int num = myscan.nextInt(); System.out.println('You entered an integer:'+num); } }
出力:
上記のプログラムでは、スキャナークラスを使用して文字列と整数のデータを読み取りました。
printfを使用したJavaでの出力のフォーマット
Javaプログラムで出力を表示する方法はすでに見てきました。このセクションでは、この出力をフォーマットする方法を説明します。この目的のために、Javaの「System.out」ストリームとともに「PrintStream」クラスのprintf関数を利用します。
Javaのprintf関数は、C / C ++のprintf関数に似ています。単一の引数を取るSystem.out.printおよびSystem.out.println関数とは異なり、System.out.printfは複数の引数を取ります。
以下は、Javaのprintf関数のバリエーションです。
しない | 関数プロトタイプ | 説明 |
---|---|---|
1 | System.out.printf(string); | 引数で指定された文字列をフォーマットせずに出力します |
二 | System.out.printf(format、arguments); | 指定されたフォーマット文字列「format」と引数を使用して出力を出力します。 |
3 | System.out.printf(ロケール、フォーマット、引数); | ロケールと引数を適用して、指定されたフォーマット文字列を使用して出力を出力します。 |
関数System.out.format()はSystem.out.printf()と同じであることに注意してください。
フォーマット文字列を指定する一般的な構文は次のとおりです。
%specifier => + for right-aligning, - for left-aligning. => to specify leading/trailing zeros and precision => suggests the data type.
例えば:
System.out.println(“ ‘%05.2f’%n”, 2.28);
次の出力を生成します。
’02 .28 ’
このチュートリアルの後のトピックで、Javaでのprintfについて詳しく説明します。
よくある質問
Q#1)標準入力と標準出力とは何ですか?
回答: 標準の入力ストリームと出力ストリームは、プログラムの実行開始時にコンピュータプログラムと外部環境の間で通信するために事前に接続されたチャネルです。 3つの異なる標準I / Oストリームは、標準入力(stdin)、標準出力(stdout)、標準エラー(stderr)です。
Q#2) プログラミングの標準入力とは何ですか?
回答: 標準入力またはstdinは、キーボードなどの標準入力デバイスから入力を読み取るために使用されるストリームです。
Q#3) 入出力ストリームとは何ですか?
XboxOne用バーチャルリアリティゴーグル
回答: 入出力ストリームは、入力を読み取るソースと、出力を送信する宛先を表します。
一般に、ストリームは、ソースおよび宛先として使用される多くのデバイス、つまりキーボード、ディスクファイル、モニターなどを表します。
Q#4) Javaの標準入力とは何ですか?
回答: Javaの標準入力は、SystemクラスによってSystem.inストリームとして提供されます。 Systemクラスはjava.langパッケージの一部です。
Q#5) Javaの標準出力とは何ですか?
回答: Javaの標準出力は、SystemクラスによってSystem.outストリームとして提供されます。 Systemクラスはjava.langパッケージの一部です。
追加の例–入力/出力ストリーム
ストリームはデータの流れを表し、そのデータは任意の形式(バイト、テキスト、プリミティブデータ型など)にすることができます。宛先にデータを書き込むには、出力ストリームが使用され、データを読み取るために、入力ストリームが使用されます。
読み取りと書き込みのさまざまな形式
入出力は、次の異なる形式として読み取り/書き込みできます。
#1)ファイルをバイトストリームとして読み取る
ここでは、データはバイト形式で読み取られます。 「「 FileInputStream」 および「 FileOutputStream 「クラスは、コンテンツをバイトとして読み取るために使用されます。このようにして、コンパイラはバイトごとにOSに要求を送信します。
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class ByteStreamsDemo { public static void main(String() args) throws IOException { FileInputStream fin =null; FileOutputStream fout =null; try { fin=new FileInputStream('input.txt'); fout=new FileOutputStream('out.txt'); int c; while((c=fin.read() )!= -1) { fout.write(c); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if(fin!=null) { fin.close(); }if(fout!=null) { fout.close(); } } } }
#2)ファイルを文字ストリームとして読み取る
このようにして、入力ストリームは文字形式で読み取られます。したがって、文字ごとに、コンパイラはOSに要求を送信します。 「「 FileReader」 および「 FileWriter」 クラスは、コンテンツを文字として読み取るのに役立ちます。
public class CharStreamDemo { public static void main(String() args) throws IOException { FileReader input = null; FileWriter output = null; try { input = new FileReader('input.txt'); output = new FileWriter('out1.txt'); int c; while ((c = input.read()) != -1) { output.write(c); } } finally { if (input != null) { input.close(); } if (output != null) { output.close(); } } } }
#3)入力/出力ストリームのバッファリング
FileInputStreamクラスまたはFileReaderクラスを使用すると、読み取りまたは書き込み操作ごとに、新しい要求がOSに送信されます。したがって、これはパフォーマンスの問題につながる可能性があります。このBufferedInputStreamまたはBufferedReaderを回避するために、クラスはバッファリングされていないクラスをラップするために使用されます。
これは、バッファが空のときに入力ストリームを読み取ります。
同様に、FileOutputStreamまたはFileWriterのクラスは、BufferedOutputStreamまたはBufferedWriterでラップされ、バッファーがいっぱいになると出力を書き込みます。
public class BufferedStreamDemo { public static void main(String() args) throws IOException { BufferedReader input = null; BufferedWriter output = null; try { input = new BufferedReader(new FileReader('input.txt')); output = new BufferedWriter(new FileWriter('out1.txt')); int c; while ((c = input.read()) != -1) { output.write(c); } } finally { if (input != null) { input.close(); } if (output != null) { output.close(); } } } }
#4)データストリームとして読み取る
このメソッド、DataInputStreamまたはDataOutputStreamクラスは、boolean、char、byte、short、int、long、float、double、Stringなどのプリミティブデータ型としてコンテンツを読み書きするために使用されます。ほとんどの場合、DataInputStreamとDataOutputStreamは一緒に使用されます。
public class DataInputOutputStreamDemo { public static void main(String() args) { File file = new File('read.bin'); FileOutputStream fos = null; DataOutputStream dos = null; try { fos=new FileOutputStream(file); dos=new DataOutputStream(fos); dos.writeInt(50244); dos.writeDouble(400.253); dos.writeChar('d'); dos.flush(); } catch (IOException e) { e.printStackTrace(); }finally { try { if(fos!=null){ fos.close(); } if(dos!=null){ dos.close(); } } catch (Exception e) { e.printStackTrace(); } } /*Reading operation */ FileInputStream fis = null; DataInputStream dis = null; try { fis = new FileInputStream(file); dis = new DataInputStream(fis); System.out.println(dis.readInt()); System.out.println(dis.readDouble()); System.out.println(dis.readChar()); } catch (IOException e) { e.printStackTrace(); }finally { try { if(fis!=null){ fis.close(); } if(dis!=null){ dis.close(); } } catch (Exception e) { e.printStackTrace(); } } } }
#5)オブジェクトストリームとして読み取る
ObjectInputStream / ObjectOutputStreamクラスは、ファイルにオブジェクトを書き込んだり、ファイルからオブジェクトを読み取ったりするのに役立ちます。オブジェクトをファイルに格納するために、クラスはSerializableインターフェースを実装する必要があります。
public class ObjectStreamDemo implements Serializable { int age ; String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
この「ObjectStreamDemo」クラスのオブジェクトを作成し、そのオブジェクトをファイルに書き込み、そのファイルから同じオブジェクトを読み取ります。
public class ObjectStreamDemoTest { public static void main(String() args) { // TODO Auto-generated method stub ObjectStreamDemo obj=new ObjectStreamDemo(); obj.setAge(32); obj.setName('bob'); try { FileOutputStream fos = new FileOutputStream('t.tmp'); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(obj); oos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } FileInputStream fis; ObjectInputStream ois; try { fis = new FileInputStream('t.tmp'); ois = new ObjectInputStream(fis); ObjectStreamDemo obj1 = (ObjectStreamDemo)ois.readObject(); System.out.println(obj1.name); System.out.println(obj1.age); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch(Exception e) { e.printStackTrace(); } } }
ファイルI / O操作
ファイルクラスは、ファイル操作を行うのに役立ちます。
Fileクラスを使用して実行されるファイル操作には、次のものがあります。
- ファイルを作成する
- ファイルが存在するかどうかを確認します
- ファイルのパスを取得します
- ファイルを書く
- ファイルを読む
- ファイルを削除し、ファイルの名前を変更します
- ファイルのアクセス許可を確認し、ファイルのアクセス許可を変更します
- ファイルをあるディレクトリから別の場所に移動する
ファイルを作成、読み取り、書き込みするためのデモプログラム:
public class CreateFileDemo { public static void main(String() args) throws IOException { File newfile=new File('created.txt'); if(!newfile.exists()) { newfile.createNewFile(); System.out.println('file not exist'); } try { String FILENAME='created.txt'; String content='hi how are u'; FileWriter fwt = new FileWriter(FILENAME); BufferedWriter bwt = new BufferedWriter(fwt); bwt.write(content); System.out.println('writing completed ...'); bwt.close(); } catch (IOException e) { e.printStackTrace(); } } }
注意すべき重要なポイント:
- ストリームは、データフローの論理表現です。
- バイト、文字、オブジェクト、プリミティブデータ型などのさまざまな形式でデータを読み書きできます。
- ファイルクラスは、ファイルの作成、ファイルの削除、およびファイルの移動、コピー、または名前の変更に使用されます。
- BufferedInputStreamまたはBufferedOutputStreamは、データをバッファリングすることによってパフォーマンスを向上させるために使用されます。
結論
Javaには、Systemクラスを使用して標準の入出力機能を提供するjava.langパッケージがあります。
標準入力と出力にそれぞれ使用されるストリーム、System.inとSystem.outの他に、ユーザーからの入力を読み取るために使用されるBufferedReader、コンソールクラス、スキャナークラスなどの他のメソッドもあります。
System.outストリームは、「PrintStream」クラス関数、print、およびprintlnを使用して出力を表示します。これらは、フォーマットせずに出力を表示するために使用される関数です。 C / C ++のprintf関数に類似した別の関数「printf」も、Javaでフォーマットされた出力に使用されます。
今後のチュートリアルでは、Javaのスキャナークラスとprintf関数について詳しく説明します。
=> 独占的なJavaトレーニングチュートリアルシリーズについては、こちらをご覧ください。