1 / 30

プログラミング 第18回

プログラミング 第18回. ファイル入出力 yukita@k.hosei.ac.jp. 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); }

Download Presentation

プログラミング 第18回

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. プログラミング 第18回 ファイル入出力 yukita@k.hosei.ac.jp プログラミング第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 ShowFile1 java ShowFile1 使用法:java ShowFile1 ファイル JavaLessons> java ShowFile1 temp java ShowFile1 temp tempが見つかりません。 プログラミング第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. バッファリング 他のプログラム (PrintWriterは省いている) バッファにデータを書き込む 書き込み要求 :BufferedWriter :バッファ バッファがいっぱいになってから書き込み要求 バッファからデータをもらう :FileWriter 最もコストがかかるところ。 書き込み要求 OS この間でもバッファリングあり プログラミング第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. File dir=new File(dirname); if(dir.mkdirs()){ System.out.println(dirname +"を作成しました。"); System.out.println("絶対パスは" +dir.getAbsolutePath()+"です。"); }else{ System.out.println(dirname +"を作成できませんでした。"); } } } MakeDir1.java (2) プログラミング第18回

  21. Character stream と byte stream • Reader や Writer オブジェクトが扱うのが文字ストリーム。16ビット単位の入出力。 • InputStream オブジェクトが扱うのがバイトストリーム。8ビット単位の入出力。 • FileInputStream: ファイルから読むためのもの • BufferedInputStream: バッファリングつき • DataInputStream: byte,short,int,...などのかたまりを読み込める。 プログラミング第18回

  22. Character stream の役目 日本語EUCコードのバイト列 Unicode文字列 InputStreamReader 日本語SJISコードのバイト列 日本語EUCコードのバイト列 Unicode文字列 OutStreamWriter 日本語SJISコードのバイト列 プログラミング第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. 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++; } FileDump1.java (3) プログラミング第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.class 00000000: CA FE BA BE 00 03 00 2D-00 1D 0A 00 06 00 0F 09 00000010: 00 10 00 11 08 00 12 0A-00 13 00 14 07 00 15 07 00000020: 00 16 01 00 06 3C 69 6E-69 74 3E 01 00 03 28 29 00000030: 56 01 00 04 43 6F 64 65-01 00 0F 4C 69 6E 65 4E 00000040: 75 6D 62 65 72 54 61 62-6C 65 01 00 04 6D 61 69 00000050: 6E 01 00 16 28 5B 4C 6A-61 76 61 2F 6C 61 6E 67 00000060: 2F 53 74 72 69 6E 67 3B-29 56 01 00 0A 53 6F 75 00000070: 72 63 65 46 69 6C 65 01-00 0A 48 65 6C 6C 6F 2E 00000080: 6A 61 76 61 0C 00 07 00-08 07 00 17 0C 00 18 00 00000090: 19 01 00 06 48 65 6C 6C-6F 21 07 00 1A 0C 00 1B 000000A0: 00 1C 01 00 05 48 65 6C-6C 6F 01 00 10 6A 61 76 ........ プログラミング第18回

More Related