【サイト内の Java 関連の資料】
FileInputStream, FileOutputStream を利用
StringBufferとappendとStringTokenizerを使ったプログラム
要点
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class HelloWorld { private static String inFileName = "c:\\in.txt"; private static String outFileName = "c:\\out.txt"; /* Shift_JIS, ISP-2022-JP, EUC-JP Windows-31J */ /* 出力時に JISAutoDetect の指定は不可 */ private static String outFileCoding = "Shift_JIS"; /* テキストファイルの読み出しと書き込みのサンプルプログラム */ /* (注)バイナリファイルのときは,DataInputStream, DataOutputStream */ public static void main(String[] args) { try{ String line; int i = 0; BufferedReader buf = new BufferedReader( new InputStreamReader( new FileInputStream( inFileName ), "JISAutoDetect" ) ); /* ファイルが存在しない場合には新たに作成.存在する場合には上書き */ BufferedWriter outFile = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( outFileName ), outFileCoding ) ); while( (line=buf.readLine()) != null ) { StringBuffer out = new StringBuffer(); i++; out.append(Integer.toString(i)); out.append(":"); out.append(line); outFile.write(out.toString()); outFile.newLine(); System.out.println(out); } buf.close(); outFile.flush(); outFile.close(); } catch(IOException e) { e.printStackTrace(); System.exit(1); } } }
要点
import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public class HelloWorld { private static String inFileName = "c:\\in.txt"; private static String outFileName = "c:\\out.txt"; /* Shift_JIS, ISP-2022-JP, EUC-JP Windows-31J */ /* 出力時に JISAutoDetect の指定は不可 */ private static String outFileCoding = "Shift_JIS"; /* トークンの区切り文字を設定 */ private static String seperator = "/ \t"; private static String new_seperator = ", "; /* テキストファイルの読み出しと書き込みのサンプルプログラム */ /* (注)バイナリファイルのときは,DataInputStream, DataOutputStream */ public static void main(String[] args) { try{ String line; int i = 0; BufferedReader buf = new BufferedReader( new InputStreamReader( new FileInputStream( inFileName ), "JISAutoDetect" ) ); /* ファイルが存在しない場合には新たに作成.存在する場合には上書き */ BufferedWriter outFile = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( outFileName ), outFileCoding ) ); while( (line=buf.readLine()) != null ) { StringTokenizer st = new StringTokenizer(line, seperator); // トークン数の取得 System.out.print( st.countTokens() + "," ); StringBuffer out = new StringBuffer(); while (st.hasMoreTokens()) { out.append(st.nextToken()); // 区切られたトークンは new_seperator で区切りなおす out.append( new_seperator ); } outFile.write(out.toString()); outFile.newLine(); System.out.println(out); } buf.close(); outFile.flush(); outFile.close(); } catch(IOException e) { e.printStackTrace(); System.exit(1); } } }
C:\in.txt の中身(トークンが「/」や空白文字やタブで区切られている)
C:\out.txt の中身(個々のトークンの後ろに「, 」が付く)
public class CustomerDSO { private String ID; private String name; private String age; private String address; private String phone_num; public String getID() { return ID; } public void setID(String id) { ID = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getPhone_num() { return phone_num; } public void setPhone_num(String phone_num) { this.phone_num = phone_num; } }
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.StringTokenizer; public class CustomerDAO { private static String inFileName = "c:\\in.txt"; private static String outFileName = "c:\\out.txt"; /* Shift_JIS, ISP-2022-JP, EUC-JP Windows-31J */ /* 出力時に JISAutoDetect の指定は不可 */ private static String outFileCoding = "Shift_JIS"; /* トークンの区切り文字を設定 */ private static String seperator = ",/ \t\r\n"; private static String new_seperator = ", "; /* テキストファイルからの読み出し */ public static LinkedList<CustomerDSO> readFromTextFile( final String inFileName, final String seperator ) { // inFileName の例 "c:\\in.txt" // seperator の例 ",/ \t\r\n" // inFileName から読み込んで,seperator で区切る try{ String line; int i = 0; BufferedReader buf = new BufferedReader( new InputStreamReader( new FileInputStream( inFileName ), "JISAutoDetect" ) ); LinkedList<CustomerDSO> list = new LinkedList<CustomerDSO>(); while( (line=buf.readLine()) != null ) { /* 空行は読み飛ばす */ if ( line.length() == 0 ) { continue; } /* 顧客データの読み込み */ StringTokenizer st = new StringTokenizer(line, seperator); CustomerDSO k = new CustomerDSO(); k.setID( st.nextToken() ); k.setName( st.nextToken() ); k.setAge( st.nextToken() ); k.setAddress( st.nextToken() ); k.setPhone_num( st.nextToken() ); // 要素数のカウント i++; // リストに追加 list.add(k); // デバック表示 /* StringBuffer out = new StringBuffer(); out .append(k.getID()).append(",") .append(k.getName()).append(",") .append(k.getAge()).append(",") .append(k.getAddress()).append(",") .append(k.getPhone_num()); System.out.println(out); */ } buf.close(); return list; } catch(IOException e) { e.printStackTrace(); System.exit(1); return null; } } /* テキストファイルからの読み出し */ public static void writeToTextFile( final String おうtFileName, final String outFileCoding, final String seperator, LinkedList<CustomerDSO> list ) { // outFileName の例 "c:\\out.txt" // outFileCoding の例 "Shift_JIS" ・・・ Shift_JIS, ISP-2022-JP, EUC-JP, Windows-31J のいずれか // seperator の例 "," (1文字でなくてもよい) // outFileName に書き込む.トークンを,seperator で区切る try{ BufferedWriter outFile = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( outFileName ), outFileCoding ) ); ListIterator<CustomerDSO> it = list.listIterator(); while( it.hasNext() ) { // 書き込み CustomerDSO k = it.next(); StringBuffer out = new StringBuffer(); out .append(k.getID()).append(seperator) .append(k.getName()).append(seperator) .append(k.getAge()).append(seperator) .append(k.getAddress()).append(seperator) .append(k.getPhone_num()); outFile.write(out.toString()); outFile.newLine(); } outFile.flush(); outFile.close(); return; } catch(IOException e) { e.printStackTrace(); System.exit(1); return; } } }
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.LinkedList; import java.util.StringTokenizer; public class HelloWorld { private static String inFileName = "c:\\in.txt"; private static String outFileName = "c:\\out.txt"; /* Shift_JIS, ISP-2022-JP, EUC-JP Windows-31J */ /* 出力時に JISAutoDetect の指定は不可 */ private static String outFileCoding = "Shift_JIS"; /* トークンの区切り文字を設定 */ private static String in_seperator = ",/ \t\r\n"; private static String out_seperator = ","; /* テキストファイルの読み出しと書き込みのサンプルプログラム */ /* (注)バイナリファイルのときは,DataInputStream, DataOutputStream */ public static void main(String[] args) { CustomerDAO dao = new CustomerDAO(); LinkedList>CustomerDSO> list = dao.readFromTextFile(inFileName, in_seperator); dao.writeToTextFile(outFileName, outFileCoding, out_seperator, list); } }
0001 九大 一郎 18 福岡市西区 000-000-0000 0002 九大 二郎 20 福岡市東区 000-000-0001 0003 九大 三郎 22 福岡市南区 000-000-0002
0001,九大 一郎,18,福岡市西区,000-000-0000 0002,九大 二郎,20,福岡市東区,000-000-0001 0003,九大 三郎,22,福岡市南区,000-000-0002
import java.util.LinkedList; import java.util.ListIterator; public class TableDSO { private LinkedList<LinkedList<String>> table; public TableDSO() { this.table = new LinkedList<LinkedList<String>>(); } public LinkedList<LinkedList<String>> getTable() { return table; } public ListIterator<LinkedList<String>> getIterator() { return table.listIterator(); } public void setTable(LinkedList<LinkedList<String>> table) { this.table = table; } public void insertIntoTable(LinkedList<String> tuple) { this.table.add(tuple); } }
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.StringTokenizer; public class TableDAO { private static String inFileName = "c:\\in.txt"; private static String outFileName = "c:\\out.txt"; /* Shift_JIS, ISP-2022-JP, EUC-JP Windows-31J */ /* 出力時に JISAutoDetect の指定は不可 */ private static String outFileCoding = "Shift_JIS"; /* トークンの区切り文字を設定 */ private static String seperator = ",/ \t\r\n"; private static String new_seperator = ", "; /* テキストファイルからの読み出し */ public static TableDSO readFromTextFile( final String inFileName, final String seperator ) { // inFileName の例 "c:\\in.txt" // seperator の例 ",/ \t\r\n" // inFileName から読み込んで,seperator で区切る try{ String line; int i = 0; BufferedReader buf = new BufferedReader( new InputStreamReader( new FileInputStream( inFileName ), "JISAutoDetect" ) ); TableDSO table = new TableDSO(); while( (line=buf.readLine()) != null ) { /* 空行は読み飛ばす */ if ( line.length() == 0 ) { continue; } /* 顧客データの読み込み */ StringTokenizer st = new StringTokenizer(line, seperator); LinkedList<String> tuple = new LinkedList<String>(); while( st.hasMoreTokens() ) { tuple.add( st.nextToken() ); } i++; // テーブルに追加 table.insertIntoTable(tuple); // デバック表示 /* StringBuffer out = new StringBuffer(); out .append(k.getID()).append(",") .append(k.getName()).append(",") .append(k.getAge()).append(",") .append(k.getAddress()).append(",") .append(k.getPhone_num()); System.out.println(out); */ } buf.close(); return table; } catch(IOException e) { e.printStackTrace(); System.exit(1); return null; } } /* テキストファイルからの読み出し */ public static void writeToTextFile( final String おうtFileName, final String outFileCoding, final String seperator, TableDSO table ) { // outFileName の例 "c:\\out.txt" // outFileCoding の例 "Shift_JIS" ・・・ Shift_JIS, ISP-2022-JP, EUC-JP, Windows-31J のいずれか // seperator の例 "," (1文字でなくてもよい) // outFileName に書き込む.トークンを,seperator で区切る try{ BufferedWriter outFile = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( outFileName ), outFileCoding ) ); ListIterator<LinkedList<String>> it = table.getIterator(); while( it.hasNext() ) { // 書き込み LinkedList<String> tuple = it.next(); StringBuffer out = new StringBuffer(); ListIterator<String> it2 = tuple.listIterator(); /* 第一列 */ if ( it2.hasNext() ) { String s= it2.next(); out.append(s); } /* 第二列目以降 */ while( it2.hasNext() ) { String s = it2.next(); out.append(seperator).append(s); } outFile.write(out.toString()); outFile.newLine(); } outFile.flush(); outFile.close(); return; } catch(IOException e) { e.printStackTrace(); System.exit(1); return; } } }
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.LinkedList; import java.util.StringTokenizer; public class HelloWorld { private static String inFileName = "c:\\in.txt"; private static String outFileName = "c:\\out.txt"; /* Shift_JIS, ISP-2022-JP, EUC-JP Windows-31J */ /* 出力時に JISAutoDetect の指定は不可 */ private static String outFileCoding = "Shift_JIS"; /* トークンの区切り文字を設定 */ private static String in_seperator = ",/ \t\r\n"; private static String out_seperator = ","; /* テキストファイルの読み出しと書き込みのサンプルプログラム */ /* (注)バイナリファイルのときは,DataInputStream, DataOutputStream */ public static void main(String[] args) { TableDAO dao = new TableDAO(); TableDSO table = dao.readFromTextFile(inFileName, in_seperator); dao.writeToTextFile(outFileName, outFileCoding, out_seperator, table); } }
C:\in.txt の中身(トークンが「/」や空白文字やタブで区切られている)
C:\out.txt の中身(個々のトークンが「,」で区切られる)
ファイルから読み込んだデータをコンソールに出力し、 同時に出力ファイルにそのままの形で書き込む。
ファイルから読み込んだデータに対して、一行ごとに 接頭語・接尾語を追加する。
StringTokenizerを用いて、文字列の置き換えを行う。 但し、文字列の最初又は最後に検索対象が存在する場合や 検索対象が連続して並んでいる場合にエラーが発生する。 これはStringTokenizerの仕様によるもののため修正不可。
読み込んだ英文ファイルに関して、
を行い、1センテンスごとに改行を付与してコンソール及び ファイルに出力するプログラム。 但し、単語中に間違って記述されているスペース文字に 対しては修正は行われない。
import java.util.*; import java.io.*; public class FileIoTest { /** * @param args */ private static String inFileName; private static String outFileName; /* Shift_JIS, ISP-2022-JP, EUC-JP Windows-31J */ private static String outFileCoding = "Shift_JIS"; public static void readAndWriteTest(){ try{ String line; BufferedReader inFile = new BufferedReader( new InputStreamReader( new FileInputStream( inFileName ), "JISAutoDetect" ) ); /* ファイルが存在しない場合には新たに作成.存在する場合には上書き */ BufferedWriter outFile = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( outFileName ), outFileCoding ) ); while((line=inFile.readLine()) != null){ outFile.write(line); outFile.newLine(); System.out.println(line); } outFile.close(); } catch(IOException e){ e.printStackTrace(); } } public static void remakeStringTest(String preString, String postString){ try{ String line; StringBuffer SB; BufferedReader inFile = new BufferedReader( new InputStreamReader( new FileInputStream( inFileName ), "JISAutoDetect" ) ); /* ファイルが存在しない場合には新たに作成.存在する場合には上書き */ BufferedWriter outFile = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( outFileName ), outFileCoding ) ); while((line=inFile.readLine()) != null){ SB = new StringBuffer().append(preString).append(line).append(postString); outFile.write(SB.toString()); outFile.newLine(); System.out.println(SB.toString()); } outFile.close(); } catch(IOException e){ e.printStackTrace(); } } public static void searchAndReplaceTest(String search, String replace){ try{ String line; StringBuffer SB; StringTokenizer ST; BufferedReader inFile = new BufferedReader( new InputStreamReader( new FileInputStream( inFileName ), "JISAutoDetect" ) ); /* ファイルが存在しない場合には新たに作成.存在する場合には上書き */ BufferedWriter outFile = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( outFileName ), outFileCoding ) ); while((line=inFile.readLine()) != null){ ST = new StringTokenizer(line, search); SB = new StringBuffer(ST.nextToken()); for(int i=0;i < ST.countTokens();i++) SB.append(replace).append(ST.nextToken()); outFile.write(SB.toString()); outFile.newLine(); System.out.println(SB.toString()); } outFile.close(); } catch(IOException e){ e.printStackTrace(); } } public static void AdjustmentDocumentTest(){ try{ String line; StringBuffer SB, SB2; StringTokenizer ST, ST2; BufferedReader inFile = new BufferedReader( new InputStreamReader( new FileInputStream( inFileName ), "JISAutoDetect" ) ); /* ファイルが存在しない場合には新たに作成.存在する場合には上書き */ BufferedWriter outFile = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( outFileName ), outFileCoding ) ); //SB : ファイル内の全ての文書を格納 SB = new StringBuffer(); while((line=inFile.readLine()) != null) SB.append(line); //ST : 1センテンス毎に文書を区切る ST = new StringTokenizer(SB.toString(), "."); while(ST.hasMoreTokens()){ //ST2 : スペース毎にセンテンスを区切る ST2 = new StringTokenizer( new StringBuffer().append(ST.nextToken()).toString(), " "); //SB2 : 整形後のセンテンスを格納 SB2 = new StringBuffer(ST2.nextToken()); while(ST2.hasMoreTokens()) SB2.append(" ").append(ST2.nextToken()); line = SB2.append(".").toString(); outFile.write(line); outFile.newLine(); System.out.println(line); } outFile.close(); } catch(IOException e){ e.printStackTrace(); } } public static void main(String[] args) { // TODO Auto-generated method stub inFileName = "in.txt"; outFileName = "out1.txt"; System.out.println("readAndWriteTest::"); readAndWriteTest(); //inFileName = "in.txt"; outFileName = "out2.txt"; System.out.println(""); System.out.println("remakeStringTest::"); remakeStringTest("<", ">"); //inFileName = "in.txt"; outFileName = "out3.txt"; System.out.println(""); System.out.println("searchAndReplaceTest::"); searchAndReplaceTest("bcd = ", "XYZ"); inFileName = "inEng.txt"; outFileName = "outEng.txt"; System.out.println(""); System.out.println("AdjustmentDocumentTest::"); AdjustmentDocumentTest(); } }