30
ププププププププ 18 1 プププププププ プ 18 プププププププ [email protected]

プログラミング 第18回

Embed Size (px)

DESCRIPTION

プログラミング 第18回. ファイル入出力 [email protected]. ShowFile1.java (List 18-1, p.218). import java.io.*; public class ShowFile1{ public static void main(String[] args){ if(args.length != 1){ System.out.println(" 使用法 :java ShowFile1 ファイル "); System.exit(0); } - PowerPoint PPT Presentation

Citation preview

プログラミング第18回 1

プログラミング 第18回

ファイル入出力[email protected]

プログラミング第18回 2

ShowFile1.java (List 18-1, p.218)import java.io.*;

public class ShowFile1{

public static void main(String[] args){

if(args.length != 1){

System.out.println(" 使用法 :java ShowFile1 ファイル ");

System.exit(0);

}

String filename=args[0];

プログラミング第18回 3

ShowFile1.java (2)

try{

BufferedReader reader=

new BufferedReader(

new FileReader(filename));

String line;

while((line=reader.readLine())!=null){

System.out.println(line);

}

reader.close();

プログラミング第18回 4

ShowFile1.java (3)

}catch(FileNotFoundException e){

System.out.println(

filename+" が見つかりません。 ");

}catch(IOException e){

System.out.println(e);

}

}

}

プログラミング第18回 5

実行例 (error 処理のケースのみ )

JavaLessons> java ShowFile1java ShowFile1使用法 :java ShowFile1 ファイル

JavaLessons> java ShowFile1 tempjava ShowFile1 temptemp が見つかりません。

プログラミング第18回 6

バッファリング

他のプログラム

:BufferedReader

:FileReader

OS

: バッファ

読み込み要求

バッファが空になってから読み込み要求

読み込み要求

読んだデータはバッファに

バッファからデータを取り出す

この間でもバッファリングあり

最もコストがかかるところ。

プログラミング第18回 7

WriteFile1.java (List 18-2, p.230)

import java.io.*;

public class WriteFile1{

public static void main(String[] args){

if(args.length != 1){

System.out.println(

" 使用法 :java WriteFile1 ファイル ");

System.exit(0);

}

String filename=args[0];

プログラミング第18回 8

WriteFile1.java (2) try{

BufferedReader reader=

new BufferedReader(

new InputStreamReader(System.in));

PrintWriter writer=

new PrintWriter(

new BufferedWriter(

new FileWriter(filename)));

String line;

while((line=reader.readLine())!=null){

writer.println(line);

}

プログラミング第18回 9

WriteFile1.java (3)

reader.close();

writer.close();

}catch(IOException e){

System.out.println(e);

}

}

}

プログラミング第18回 10

実行方法• java WriteFile1 test.txt

• 入力待ちになるので,適当なテキストを入力し,最後に ^Z( コントロール -Z)+改行。

• test.txt の内容を確認する。

プログラミング第18回 11

バッファリング

他のプログラム

:BufferedWriter

:FileWriter

OS

: バッファ

書き込み要求

バッファがいっぱいになってから書き込み要求

書き込み要求

バッファからデータをもらう

バッファにデータを書き込む

この間でもバッファリングあり

最もコストがかかるところ。

( PrintWriterは省いている)

プログラミング第18回 12

注意• println は PrintWriter のメソッド• System.out は実は PrintWriter クラスの

インスタンスであった。

プログラミング第18回 13

DeleteFile1.java (List 18-3, p.233)import java.io.*;

public class DeleteFile1{

public static void main(String[] args){

if(args.length != 1){

System.out.println(

" 使用法 :java DeleteFile1 削除ファイル ");

System.exit(0);

}

String filename=args[0];

プログラミング第18回 14

DeleteFile1.java (2) File file=new File(filename);

if(file.delete()){

System.out.println(filename

+" を削除しました。 ");

}else{

System.out.println(filename

+" を削除できませんでした。 ");

}

}

}

プログラミング第18回 15

RenameFile1.java (List 18-4, p.234)

import java.io.*;

public class RenameFile1{

public static void main(String[] args){

if(args.length != 2){

System.out.println(

" 使用法 :java RenameFile1 現ファイル 新ファイル名 ");

System.exit(0);

}

String oldfilename=args[0];

String newfilename=args[1];

プログラミング第18回 16

RenameFile1.java (2)

File oldfile=new File(oldfilename);

File newfile=new File(newfilename);

if(oldfile.renameTo(newfile)){

System.out.println(oldfilename+" を "

+newfilename+" に変更しました。 ");

}else{

System.out.println(oldfilename+" を "

+newfilename+" に変更できませんでした。 ");

}

}

}

プログラミング第18回 17

ListDir1.java (List 18-6, p.237)import java.io.*;

public class ListDir1{

public static void main(String[] args){

if(args.length != 1){

System.out.println(

" 使用法 :java ListDir1 ディレクトリ名 ");

System.exit(0);

}

プログラミング第18回 18

ListDir1.java (2)

File dir=new File(args[0]);

String[] dirlist=dir.list();

for(int i=0; i<dirlist.length; i++){

System.out.println(dirlist[i]);

}

}

}

プログラミング第18回 19

MakeDir1.java(List 18-7, p.238)import java.io.*;

public class MakeDir1{

public static void main(String[] args){

if(args.length != 1){

System.out.println(

" 使用法 :java MakeDir1 ディレクトリ名 ");

System.exit(0);

}

String dirname=args[0];

プログラミング第18回 20

MakeDir1.java (2)

File dir=new File(dirname);

if(dir.mkdirs()){

System.out.println(dirname

+" を作成しました。 ");

System.out.println(" 絶対パスは "

+dir.getAbsolutePath()+" です。 ");

}else{

System.out.println(dirname

+" を作成できませんでした。 ");

}

}

}

プログラミング第18回 21

Character stream と byte stream

• Reader や Writer オブジェクトが扱うのが文字ストリーム。 16 ビット単位の入出力。

• InputStream オブジェクトが扱うのがバイトストリーム。 8 ビット単位の入出力。– FileInputStream: ファイルから読むためのもの– BufferedInputStream: バッファリングつき– DataInputStream: byte,short,int,... などのかたま

りを読み込める。

プログラミング第18回 22

Character stream の役目

InputStreamReader

OutStreamWriter

Unicode 文字列

日本語 SJISコードのバイト列

日本語 EUCコードのバイト列

Unicode 文字列

日本語 SJISコードのバイト列

日本語 EUCコードのバイト列

プログラミング第18回 23

FileDump1.java (List 18-8, p.244)

import java.io.*;

public class FileDump1{

public static void main(String[] args){

DataInputStream in=null;

if(args.length != 1){

System.out.println(

" 使用法 :java FileDump1 ファイル名 ");

System.exit(0);

}

プログラミング第18回 24

FileDump1.java (2)

try{

in=new DataInputStream(

new BufferedInputStream(

new FileInputStream(args[0])));

int offset=0;

プログラミング第18回 25

FileDump1.java (3)

    while(true){

byte b=in.readByte();

if(offset%16==0){

System.out.print(intToHexString(offset)+": ");

}else if(offset%8==0){

System.out.print("-");

}else{

System.out.print(" ");

}

System.out.print(byteToHexString(b));

if(offset%16==15){

System.out.println("");

}

offset++;

}

プログラミング第18回 26

FileDump1.java (4)

}catch(FileNotFoundException e){

System.out.println(args[0]

+" が見つかりません。 ");

}catch(EOFException e){

System.out.println("");

}catch(IOException e){

System.out.println(""+e);

}

プログラミング第18回 27

FileDump1.java (5)

try{

if(in!=null){

in.close();

}

}catch(IOException e){

System.out.println(""+e);

}

}

プログラミング第18回 28

FileDump1.java (6)

  public static String intToHexString(int n){

return byteToHexString((byte)(n>>>24))

+byteToHexString((byte)(n>>>16))

+byteToHexString((byte)(n>>>8))

+byteToHexString((byte)n);

}

プログラミング第18回 29

FileDump1.java (7)

public static String byteToHexString(byte b){

int n=(int)b;

if(n<0){

n=256+n;

}

if(n<16){

return "0"+Integer.toHexString(n).toUpperCase();

}else{

return Integer.toHexString(n).toUpperCase();

}

}

}

プログラミング第18回 30

実行例

JavaLessons> java FileDump1 Hello.class00000000: CA FE BA BE 00 03 00 2D-00 1D 0A 00 06 00 0F 0900000010: 00 10 00 11 08 00 12 0A-00 13 00 14 07 00 15 0700000020: 00 16 01 00 06 3C 69 6E-69 74 3E 01 00 03 28 2900000030: 56 01 00 04 43 6F 64 65-01 00 0F 4C 69 6E 65 4E00000040: 75 6D 62 65 72 54 61 62-6C 65 01 00 04 6D 61 6900000050: 6E 01 00 16 28 5B 4C 6A-61 76 61 2F 6C 61 6E 6700000060: 2F 53 74 72 69 6E 67 3B-29 56 01 00 0A 53 6F 7500000070: 72 63 65 46 69 6C 65 01-00 0A 48 65 6C 6C 6F 2E00000080: 6A 61 76 61 0C 00 07 00-08 07 00 17 0C 00 18 0000000090: 19 01 00 06 48 65 6C 6C-6F 21 07 00 1A 0C 00 1B000000A0: 00 1C 01 00 05 48 65 6C-6C 6F 01 00 10 6A 61 76........