Upload
felicia-munoz
View
20
Download
1
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回 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回 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........