public class hiFile extends Object
ファイル操作に関するメソッド群です。
次のような関数群からなります。
// --- テキストファイルのオープン BufferedReader _br =hiFile.open
TextFile
R(fileName); PrintWriter _pr =hiFile.open
TextFile
W(fileName); // operTextFileW()にはhiU.APPENDなどのオプションがあります // --- バイナリファイルのオープン BufferedInputStream _bis =hiFile.open
BinaryFile
R(fileName); BufferedOutputStream _bos =hiFile.open
BinaryFile
W(fileName); // operBinaryFileW()にはhiU.APPENDなどのオプションがあります // --- テキストファイルのまとめ読み String _allText =hiFile.readTextAll
(fileName); ArrayList<String> _lines =hiFile.readTextLines
(fileName); // --- 階層化したファイルの処理。 // ファイル/フォルダを削除するhiFile.delete
(folder_name...); // ファイルリストを得る LinkedHashSet<File> _files =hiFile.list
(folder_name...); // --- close()を持つオブジェクトの一括close()、Exception無hiFile.close(Closeable...)
リソースファイルのopenなども用意されています。
hiFile.openPrintStream("test.csv","utf-8",hiU.ADD_BOM)
;
修飾子とタイプ | メソッドと説明 |
---|---|
static String |
absolutePath(File file_)
指定ファイルの絶対パス名を得る.
|
static String |
absolutePath(String fileName_)
指定ファイルの絶対パス名を得る.
|
static BufferedReader |
asBufferedReader(InputStream is_)
InputStreamからBufferedReaderを得る.
|
static BufferedReader |
asBufferedReader(InputStream is_,
String charSet_)
InputStreamからBufferedReaderを文字セット付きで得る.
|
static PrintWriter |
asPrintWriter(OutputStream os_)
OutputStreamからPrintWriter(utf-8)を得る.
|
static PrintWriter |
asPrintWriter(OutputStream os_,
String charSet_)
OutputStreamからPrintWriterを名前、文字セット指定で得る.
|
static PrintWriter |
asPrintWriter(OutputStream os_,
String charSet_,
long option_)
OutputStreamからPrintWriterを名前、文字セット指定、オプション指定で得る.
|
static boolean |
canOpenFileR(String fileName_)
ファイルが読み込みオープンできるか.
|
static boolean |
canOpenResFileR(Class class_,
String fileName_)
リソースが読み込みオープンできるか.
|
static boolean |
canOpenResFileR(String fileName_)
リソースが読み込みオープンできるか.
|
static void |
close(Closeable... ios_)
例外を投げないclose.
|
static void |
close(Object... ios_)
Closeableがない1.7以前のシステム用
引数Objectがcloseメソッドを持つ場合呼び出します。
|
static String |
confirm(String text_)
標準出力に質問を出力し、標準入力から回答を得る.
|
static int |
delete(File... files_)
階層化したフォルダを削除する
|
static int |
delete(String... files_)
階層化したフォルダを削除する
|
static LinkedHashSet<File> |
list(File... base_)
階層化したフォルダの全ファイルを取得する
|
static LinkedHashSet<File> |
list(String... base_)
階層化したフォルダの全ファイルを取得する
|
static BufferedInputStream |
openBinaryFileR(File file_)
バイナリファイルを読み込み用にオープンする.
|
static BufferedInputStream |
openBinaryFileR(String fileName_)
バイナリファイルを読み込み用にオープンする.
|
static BufferedInputStream |
openBinaryFileR(URL url_)
URLでバイナリ読み込み用にオープンする(試験中)
|
static BufferedOutputStream |
openBinaryFileW(File file_)
バイナリファイルを書き出し用にオープンする.
|
static BufferedOutputStream |
openBinaryFileW(File file_,
long option_)
バイナリファイルを書き出し用にオープンする(オプション指定可).
|
static BufferedOutputStream |
openBinaryFileW(String fileName_)
バイナリファイルを書き出し用にオープンする.
|
static BufferedOutputStream |
openBinaryFileW(String fileName_,
long option_)
バイナリファイルを書き出し用にオープンする(オプション指定可).
|
static BufferedOutputStream |
openBinaryFileW(URL url_)
URLでバイナリ書出し用にオープンする(試験中)
|
static ObjectInputStream |
openObjectFileR(File file_)
シリアライズされたデータの入ったファイルを読み込み用にオープンする.
|
static ObjectInputStream |
openObjectFileR(String fileName_)
シリアライズされたデータの入ったファイルを読み込み用にオープンする.
|
static ObjectInputStream |
openObjectFileR(URL url_)
URLでObject読み込み用にオープンする(試験中)
|
static ObjectOutputStream |
openObjectFileW(File file_)
ファイルをオブジェクト書き出し用にオープンする.
|
static ObjectOutputStream |
openObjectFileW(File file_,
long option_)
ファイルをオブジェクト書き出し用にオープンする(オプション可).
|
static ObjectOutputStream |
openObjectFileW(String fileName_)
ファイルをオブジェクト書き出し用にオープンする.
|
static ObjectOutputStream |
openObjectFileW(String fileName_,
long option_)
ファイルをオブジェクト書き出し用にオープンする(APPEND可).
|
static ObjectOutputStream |
openObjectFileW(URL url_)
URLでObject書出し用にオープンする(試験中)
|
static PrintStream |
openPrintStream(File file_,
String charSet_,
long option_)
PrintStreamをオープンする(ファイル名指定).
|
static PrintStream |
openPrintStream(OutputStream outputStream_,
String charSet_,
long option_)
PrintStreamをオープンする(OutputStream指定).
|
static PrintStream |
openPrintStream(String fileName_,
String charSet_,
long option_)
PrintStreamをオープンする(ファイル名指定).
|
static BufferedInputStream |
openResBinaryFileR(Class class_,
String fileName_)
バイナリのリソースファイルを読み込み用にオープンする.
|
static BufferedInputStream |
openResBinaryFileR(String fileName_)
バイナリのリソースファイルを読み込み用にオープンする.
|
static ObjectInputStream |
openResObjectFileR(Class class_,
String fileName_)
シリアライズされたデータの入ったリソースファイルを読み込み用にオープンする.
|
static ObjectInputStream |
openResObjectFileR(String fileName_)
シリアライズされたデータの入ったリソースファイルを読み込み用にオープンする.
|
static BufferedReader |
openResTextFileR(Class class_,
String fileName_)
テキストのリソースファイルを読み込み用にオープンする(utf-8).
|
static BufferedReader |
openResTextFileR(Class class_,
String fileName_,
String charSet_)
テキストのリソースファイルを文字セット指定で読み込み用にオープンする.
|
static BufferedReader |
openResTextFileR(Class class_,
String fileName_,
String charSet_,
long option_)
テキストファイルを文字セット指定で読み込み用にオープンする.
|
static BufferedReader |
openResTextFileR(String fileName_)
テキストのリソースファイルを読み込み用にオープンする(utf-8).
|
static BufferedReader |
openResTextFileR(String fileName_,
String charSet_)
テキストのリソースファイルを文字セット指定で読み込み用にオープンする.
|
static BufferedReader |
openResTextFileR(String fileName_,
String charSet_,
long option_)
テキストファイルを文字セット指定で読み込み用にオープンする.
|
static BufferedReader |
openTextFileR(File file_)
テキストファイルを読み込み用にオープンする(utf-8).
|
static BufferedReader |
openTextFileR(File file_,
long option_)
テキストファイルを文字セット指定で読み込み用にオープンする.
|
static BufferedReader |
openTextFileR(File file_,
String charSet_)
テキストファイルを文字セット指定で読み込み用にオープンする.
|
static BufferedReader |
openTextFileR(File file_,
String charSet_,
long option_)
テキストファイルを文字セット指定で読み込み用にオープンする.
|
static BufferedReader |
openTextFileR(String fileName_)
テキストファイルを読み込み用にオープンする(utf-8).
|
static BufferedReader |
openTextFileR(String fileName_,
long option_)
テキストファイルを文字セット指定で読み込み用にオープンする.
|
static BufferedReader |
openTextFileR(String fileName_,
String charSet_)
テキストファイルを文字セット指定で読み込み用にオープンする.
|
static BufferedReader |
openTextFileR(String fileName_,
String charSet_,
long option_)
テキストファイルを文字セット指定で読み込み用にオープンする.
|
static BufferedReader |
openTextFileR(URL url_)
URLでテキスト読み込み用にオープンする(試験中).
|
static BufferedReader |
openTextFileR(URL url_,
String charSet_)
URLでテキスト書き込み用にオープンする(試験中)
|
static PrintWriter |
openTextFileW(File file_)
テキスト出力用のファイルをオープンする(utf-8).
|
static PrintWriter |
openTextFileW(File file_,
long option_)
テキスト出力用のファイルをオープンする(オプション指定可).
|
static PrintWriter |
openTextFileW(File fi_,
String charSet_)
テキスト出力用のファイルを文字セット指定でオープンする.
|
static PrintWriter |
openTextFileW(File file_,
String charSet_,
long option_)
テキスト出力用のファイルを文字セット指定でオープン(オプション指定可).
|
static PrintWriter |
openTextFileW(String fileName_)
テキスト出力用のファイルをオープンする(utf-8).
|
static PrintWriter |
openTextFileW(String fileName_,
long option_)
テキスト出力用のファイルをオープンする(オプション指定可).
|
static PrintWriter |
openTextFileW(String fileName_,
String charSet_)
テキスト出力用のファイルを文字セット指定でオープンする.
|
static PrintWriter |
openTextFileW(String fileName_,
String charSet_,
long option_)
テキスト出力用のファイルを文字セット指定でオープン(オプション指定可).
|
static PrintWriter |
openTextFileW(URL url_)
URLでテキスト書き出し用にオープンする(試験中)
|
static PrintWriter |
openTextFileW(URL url_,
String charSet_)
URLでテキスト書き出し用にオープンする(試験中)
|
static String |
parentPath(File file_)
指定ファイルのパス部の名前を得る.
|
static String |
parentPath(String fileName_)
指定ファイルの親のパス名を得る.
|
static String |
path(File file_)
パス名の区切りをスラッシュで得る
|
static String |
path(String fileName_)
パス名の区切りをスラッシュで得る
|
static void |
printLines(hiU.SupplierEx<PrintWriter,Exception> func_,
Iterable<String> lines_)
指定のラムダ関数でオープンし、全行出力する.
|
static void |
printLines(hiU.SupplierEx<PrintWriter,Exception> func_,
Iterable<String> lines_,
String eol_)
指定のラムダ関数でオープンし、全行出力する.
|
static PrintWriter |
printLines(PrintWriter pw_,
Iterable<String> lines_)
指定文字列並びを行並びとしてファイルなどに出力する.
|
static PrintWriter |
printLines(PrintWriter pw_,
Iterable<String> lines_,
String eol_)
指定文字列並びを行並びとしてファイルなどに出力する.
|
static void |
println(hiU.SupplierEx<PrintWriter,Exception> func_,
String lines_)
指定のラムダ関数でオープンし、出力する.
|
static byte[] |
readBinaryAll(File file_)
byte並び全体を読み込む.
|
static byte[] |
readBinaryAll(String fileName_)
byte並び全体を読み込む.
|
static int |
readByte(InputStream is_)
1バイト読み込む.
|
static int |
readBytes(InputStream is_,
byte[] buf_)
指定長バイト分断無しで読み込む.
|
static int |
readBytes(InputStream is_,
byte[] buf_,
int len_)
指定長バイト分断無しで読み込む.
|
static int |
readBytes(InputStream is_,
byte[] buf_,
int offset_,
int len_)
指定長バイト分断無しで読み込む.
|
static byte[] |
readBytes(InputStream is_,
int len_)
指定長バイト分断無しで読み込む(EOF例外あり).
|
static String |
readTextAll(BufferedReader br_)
全体を読み込む.
|
static String |
readTextAll(BufferedReader br_,
long option_)
全体を読み込む.
|
static String |
readTextAll(BufferedReader br_,
String eol_)
BufferedReaderから全行読む.
|
static String |
readTextAll(File file_)
テキストファイルから全行読み取る.
|
static String |
readTextAll(File file_,
String eol_)
テキストファイルから全行読み取る.
|
static String |
readTextAll(hiU.SupplierEx<BufferedReader,Exception> func_,
long option_)
指定のラムダ関数でオープンし、改行コードを保持し全体を読み込む.
|
static String |
readTextAll(hiU.SupplierEx<BufferedReader,Exception> func_,
String eol_)
指定のラムダ関数でオープンし、全行読み込む.
|
static String |
readTextAll(String fileName_)
指定名ファイル全体を読み込む.改行は\n
各行をArrayList<String>に得る
readTextLines(String) も用意してあります。 |
static String |
readTextAll(String fileName_,
String eol_)
テキストファイルから全行読み取る.
|
static ArrayList<String> |
readTextLines(BufferedReader br_)
BufferedReaderから全行読む.
|
static ArrayList<String> |
readTextLines(File file_)
テキストファイルから全行読み取る.
|
static ArrayList<String> |
readTextLines(hiU.SupplierEx<BufferedReader,Exception> func_)
指定のラムダ関数でオープンし、全行読み込む.
|
static ArrayList<String> |
readTextLines(String fileName_)
テキストファイルから全行読み取る.
|
static void |
skip(BufferedInputStream bis_,
long len_)
BufferedInputStreamを繰り返し無しで読み飛ばす.
|
static void |
skip(RandomAccessFile raf_,
long len_)
RandamAccessFileをlongによる長さ指定で読み飛ばす.
|
static InputStream |
skipUTF8BOM(InputStream is_,
String charSet_)
先頭のUTF-8のBOM(0xEFBBBF)を読み飛ばす.
|
static String |
sysCharSet()
システム(仮想マシン)のデフォルトの文字セットを得る.
|
static String |
trimDots(String absolutePath_)
絶対パス名の.
|
static int |
tryReadBytes(InputStream is_,
byte[] buf_,
int len_)
指定長バイト分断無しで読み込む.
|
static int |
tryReadBytes(InputStream is_,
byte[] buf_,
int offset_,
int len_)
指定長バイト分断無しで読み込む.
|
static <T> void |
use(hiU.SupplierEx<T,Exception> open_,
hiU.ConsumerEx<T,Exception> use_,
Consumer<T> close_)
資源のオープン、利用、クローズをラムダ関数で行う.
|
static <T,R> R |
use(hiU.SupplierEx<T,Exception> open_,
hiU.FunctionEx<T,R,Exception> use_)
資源のオープン、利用し結果を取得する
資源がclose()関数を持つ場合、自動でclose()されます。
|
static void |
useTextFileR(String fileName_,
hiU.BiConsumerEx<String,BufferedReader,Exception> func_)
テキスト入力ファイルをラムダ式で使用.
|
static void |
useTextFileR(String fileName_,
long option_,
hiU.BiConsumerEx<String,BufferedReader,Exception> func_)
テキスト入力ファイルをラムダ式で使用.
|
static void |
useTextFileR(String fileName_,
String charSet_,
hiU.BiConsumerEx<String,BufferedReader,Exception> func_)
テキスト入力ファイルをラムダ式で使用.
|
static void |
useTextFileR(String fileName_,
String charSet_,
long option_,
hiU.BiConsumerEx<String,BufferedReader,Exception> func_)
テキスト入力ファイルをラムダ式で使用.
|
static void |
useTextFileR(URL url_,
hiU.BiConsumerEx<URL,BufferedReader,Exception> func_)
テキスト出力ファイルをラムダ式で使用.
|
static void |
useTextFileR(URL url_,
String charSet_,
hiU.BiConsumerEx<URL,BufferedReader,Exception> func_)
テキスト出力ファイルをラムダ式で使用.
|
static void |
useTextFileW(String fileName_,
hiU.BiConsumerEx<String,PrintWriter,Exception> func_)
テキスト出力ファイルをラムダ式で使用.
|
static void |
useTextFileW(String fileName_,
long option_,
hiU.BiConsumerEx<String,PrintWriter,Exception> func_)
テキスト出力ファイルをラムダ式で使用.
|
static void |
useTextFileW(String fileName_,
String charSet_,
hiU.BiConsumerEx<String,PrintWriter,Exception> func_)
テキスト出力ファイルをラムダ式で使用.
|
static void |
useTextFileW(String fileName_,
String charSet_,
long option_,
hiU.BiConsumerEx<String,PrintWriter,Exception> func_)
テキスト出力ファイルをラムダ式で使用.
|
static void |
useTextFileW(URL url_,
hiU.BiConsumerEx<URL,PrintWriter,Exception> func_)
テキスト出力ファイルをラムダ式で使用.
|
static void |
useTextFileW(URL url_,
String charSet_,
hiU.BiConsumerEx<URL,PrintWriter,Exception> func_)
テキスト出力ファイルをラムダ式で使用.
|
public static final int delete(File... files_)
files_
- ファイル並び(ファイル/フォルダ可,null可)public static final int delete(String... files_)
files_
- ファイル並び(ファイル/フォルダ可,null可)public static final LinkedHashSet<File> list(String... base_)
base_
- 先頭のフォルダpublic static final LinkedHashSet<File> list(File... base_)
base_
- 先頭のフォルダpublic static void close(Closeable... ios_)
close()呼び出しで例外が投げられないようにします。
try-with-resource取扱いでない場合の例外処理でのcloseを補助します。 このメソッドは例外を出しません。nullを与えても無視されます。
次の様な使い方ができます。
BufferedReader br =null; InputStreamReader isr=null; FileInputStream fis=null; try{ String fileName = "test.txt"; // ファイル名 String charSet = "utf-8"; // 文字コードセット BufferedReader br= new BufferedReader( isr= new InputStreamReader( fis= new FileInputStream( new File(fileName)) ,charSet));// 省略するとシステム標準 //... br.close(); } catch(Exception e){ close(br,isr,fis); e.printStackTrace(hiU.err); // .. 例外処理 }
ios_
- closeしたいioインスタンス並びpublic static void close(Object... ios_)
引数Objectがcloseメソッドを持つ場合呼び出します。
ios_
- closeしたいioインスタンス並びpublic static PrintWriter openTextFileW(String fileName_)
// テキストファイルsample.txtをオープンする。文字コードはutf-8 PrintWriter pw= hiFile.openTextFileW("sample.txt"); pw.println("test-text-line"); // ... pw.close();
テキスト・フォーマット出力用のファイルを文字セット"utf-8"、
自動フラッシュモードでオープンします。
フォルダが無い場合フォルダも生成されます。
システム標準の文字セットを使いたい場合
openTextFileW(ファイル名,null)
を使ってください。
このメソッドは単純定型手続きをまとめたものです。
次の操作とほぼ同等です。(実際には例外処理とBOM処理が入っています)
File dir= new File(fileName_).getParentFile(); if( dir!=null&&!dir.exists() ) dir.mkdirs(); PrintWriter pw= new PrintWriter( new BufferedWriter( new OutputStreamWriter( new FileOutputStream( new File(fileName_) ,false // appendではない ) ,"utf-8")) ,true // AUTO-FLUSH );
なお、Javaには解体子がありませんので、最後にPrintWriterのclose()を 忘れてはなりません。
fileName_
- ファイル名public static PrintWriter openTextFileW(URL url_)
url_
- URLpublic static PrintWriter openTextFileW(File file_)
openTextFileW(String)
のファイル名引数をFileに
置き換えたものです。
フォルダが無い場合フォルダも生成されます。例外発生時には生成されたフォルダが残る可能性があります。
file_
- ファイルpublic static PrintWriter openTextFileW(String fileName_, long option_)
// テキストファイルsample.txtを追加モードでオープンする。文字コードはutf-8
PrintWriter pw= hiFile.openTextFileW("sample.txt",hiU.APPEND);
openTextFileW(String)
にオプションを付加したものです。
受け付けるオプションはhiU.DO_NOT_CREATE_FOLDER
,hiU.APPEND
とhiU.NO_FLUSH
です。
hiU.APPEND
を付けると既存ファイルへの追加モードでオープンします。
hiU.NO_FLUSH
を指定すると自動フラッシュを行いません。デフォルトでは自動フラッシュモードです
デフォルトではフォルダが無い場合フォルダも生成されます。例外発生時には生成されたフォルダが残る可能性があります。
hiU.DO_NOT_CREATE_FOLDER
が指定されている場合、
フォルダの生成は行いません。
各オプションはビット加算できます。
次の操作と同等です。
File dir= new File(fileName_).getParentFile(); if( dir!=null&&!dir.exists() ) dir.mkdirs(); PrintWriter pw= new PrintWriter( new BufferedWriter( new OutputStreamWriter( new FileOutputStream( new File(fileName_) ,(option_&hiU.APPEND)!=0 // hiU.APPEND指定でtrue ) ,"utf-8")) ,(option_&hiU.NO_FLUSH)==0 // hiU.NO_FLUSHを指定でfalse );
fileName_
- ファイル名option_
- hiU.DO_NOT_CREATE_FOLDER
,hiU.APPEND
,hiU.NO_FLUSH
,hiU.ADD_BOM
public static PrintWriter openTextFileW(File file_, long option_)
openTextFileW(String,long)
のファイル名引数をFileに
置き換えたものです。
フォルダが無い場合フォルダも生成されます。
file_
- ファイルoption_
- hiU.DO_NOT_CREATE_FOLDER
,hiU.APPEND
,hiU.NO_FLUSH
public static PrintWriter openTextFileW(String fileName_, String charSet_)
// テキストファイルsample.txtを文字コード"shift-jis"でオープンする
PrintWriter pw= hiFile.openTextFileW("sample.txt","shift-jis");
テキスト・フォーマット出力用のファイルを文字セット指定、
自動フラッシュモードでオープンします。
文字セットとしてnullを指定するとシステム標準の文字セットが使われます。
フォルダが存在しない場合フォルダも生成します。
次の操作と同等です。
File dir= new File(fileName_).getParentFile(); if( dir!=null&&!dir.exists() ) dir.mkdirs(); PrintWriter pw= new PrintWriter( new BufferedWriter( new OutputStreamWriter( new FileOutputStream( new File(fileName_) ,false // appendではない ) ,charSet_)) // null指定の場合はこの引数省略 ,true // auto-flush );
なお、Javaには解体子がありませんので、最後にPrintWriterのclose()を
忘れてはなりません。
fileName_
- ファイル名charSet_
- 文字セット "utf-8","shift-jis"等;nullまたは"-"の場合システム標準public static PrintWriter openTextFileW(File fi_, String charSet_)
openTextFileW(String,String)
のファイル名引数をFileに
置き換えたものです。
フォルダが存在しない場合フォルダも生成します。
fi_
- ファイルcharSet_
- 文字セット "utf-8","shift-jis"等;nullまたは"-"の場合システム標準public static PrintWriter openTextFileW(URL url_, String charSet_)
url_
- URLcharSet_
- 文字コードセットpublic static PrintWriter openTextFileW(String fileName_, String charSet_, long option_)
// テキストファイルsample.txtを文字コード"shift-jis"、APPENDモードでオープンする
PrintWriter pw= hiFile.openTextFileW("sample.txt","shift-jis",hiU.APPEND);
openTextFileW(String,String)
にオプションを付加したものです。
受け付けるオプションはhiU.DO_NOT_CREATE_FOLDER
,hiU.DO_NOT_CREATE_FOLDER
,
hiU.APPEND
とhiU.NO_FLUSH
です。
hiU.APPENDを付けると既存ファイルへの追加モードでオープンします。
デフォルトでは自動フラッシュモードですがhiU.NO_FLUSHを指定すると自動フラッシュoffとできます。
デフォルトではフォルダが存在しない場合フォルダも生成しますが、
hiU.DO_NOT_CREATE_FOLDER
が指定されている場合、フォルダの生成は行いません。
各オプションはビット加算できます。
次の操作と同等です。
File dir= new File(fileName_).getParentFile(); if( dir!=null&&!dir.exists() ) dir.mkdirs() PrintWriter pw= new PrintWriter( new BufferedWriter( new OutputStreamWriter( new FileOutputStream( new File(fileName_) ,(option_&hiU.APPEND)!=0 // hiU.APPEND指定でtrue ) ,charSet_)) // null指定の場合引数省略 ,(option_&hiU.NO_FLUSH)==0 // hiU.NO_FLUSHを指定でfalse );
不正文字コードによりExceptionが発生した場合途中階層の FileOutputStreamは直ちにcloseされます。APPENDが指定 されておらず、KEEP_ON_ERRORが指定されていない場合、ファイルは 削除されます。
fileName_
- ファイル名charSet_
- 文字セット "utf-8","shift-jis"等;nullまたは"-"の場合システム標準option_
- hiU.DO_NOT_CREATE_FOLDER
,hiU.APPEND
,hiU.NO_FLUSH
,hiU.KEEP_ON_ERROR
public static PrintWriter openTextFileW(File file_, String charSet_, long option_)
openTextFileW(String,String,long)
のファイル名引数をFileに
置き換えたものです。
デフォルトではフォルダが存在しない場合フォルダも生成しますが、
hiU.DO_NOT_CREATE_FOLDER
が指定されている場合、フォルダの生成は行いません。
不正文字コードによりExceptionが発生した場合途中階層の
FileOutputStreamは直ちにcloseされます。hiU.APPEND
が指定
されておらず、hiU.KEEP_ON_ERROR
が指定されていない場合、ファイルは削除されます。
file_
- ファイルcharSet_
- 文字セット "utf-8","shift-jis"等;nullまたは"-"の場合システム標準option_
- hiU.DO_NOT_CREATE_FOLDER
,hiU.APPEND
,hiU.NO_FLUSH
,hiU.KEEP_ON_ERROR
public static BufferedReader openTextFileR(String fileName_)
// テキストファイルsample.txtを読み込み用にオープンする。文字セットはutf-8 BufferedReader br= hiFile.openTextFileR("sample.txt"); String line; while( (line=br.readLine())!=null ){ hiU.err.println(line); } br.close();
テキスト入力用のファイルをオープンします。
先頭にBOM(0xEFBBBF)がある場合読み飛ばされます。
BufferedReaderは主にreadLine()等で文字列読み込みを行うクラスです。
単純定型手続きをまとめたものです。
次の操作と同等です。
BufferedReader br= new BufferedReader( new InputStreamReader( new FileInputStream( new File(fileName_)) ,"utf-8"));
なおBufferedReaderにはreadLine()がありますがReaderにはなく、全く別 ものと考えるべきです
fileName_
- ファイル名public static BufferedReader openTextFileR(File file_)
openTextFileR(String)
のファイル名引数をFileに
置き換えたものです。
file_
- ファイルpublic static BufferedReader openTextFileR(URL url_)
URLでファイルを指定します。URLには次の様な形式があります。
次の様な使い方ができます。
URL url=new URL("ftp://ftp:ftp@192.168.68.144/pub/file.txt" BufferedReader br= hiFile.openTextFileR(url);
url_
- URLpublic static BufferedReader openTextFileR(String fileName_, String charSet_)
// テキストファイルsample.txtを文字セット"shift-jis"で読み込み用にオープンする
BufferedReader br= hiFile.openTextFileR("sample.txt","shift-jis");
テキスト入力用のファイルを文字セット指定でオープンします。
文字セットがUTF-8の場合先頭にBOM(0xEFBBBF)がある場合読み飛ばされます。
文字セットとしてnullを指定すると、システム標準の文字セットが採用されます。
BufferedReaderは主にreadLine()等で文字列読み込みを行うクラスです。
単純定型手続きをまとめたものです。
次の操作と同等です。
BufferedReader br= new BufferedReader( new InputStreamReader( new FileInputStream( new File(fileName_)) ,charSet_)); // null指定の場合は引数省略
なおBufferedReaderにはreadLine()がありますがReaderにはなく、全く別 ものと考えるべきです
fileName_
- ファイル名charSet_
- 文字セット "utf-8","shift-jis"等,nullの場合はシステム標準public static BufferedReader openTextFileR(File file_, String charSet_)
openTextFileR(String,String)
のファイル名引数をFileに
置き換えたものです
file_
- ファイルcharSet_
- 文字セット "utf-8","shift-jis"等,nullの場合はシステム標準public static BufferedReader openTextFileR(URL url_, String charSet_)
url_
- URLcharSet_
- 文字コードセットpublic static boolean canOpenFileR(String fileName_)
次の操作と同等です。
(new File(fileName_)).canRead();
fileName_
- ファイル名public static InputStream skipUTF8BOM(InputStream is_, String charSet_)
文字コードセットとして"UTF-8","utf-8"が指定されている場合、 先頭にBOMコードがあれば読み飛ばします。先頭がBOMコードでない場合はそのままです。
is_
- オープン直後の入力ストリームcharSet_
- 文字コードセットpublic static BufferedReader openTextFileR(String fileName_, String charSet_, long option_)
openTextFileR(String,String)
にオプション指定を付加したものです。
fileName_
- ファイル名charSet_
- 文字セット "utf-8","shift-jis"等,nullの場合はシステム標準option_
- hiU.KEEP_BOM
を指定するとBOMをスキップしないpublic static BufferedReader openTextFileR(String fileName_, long option_)
openTextFileR(String)
にオプション指定を付加したものです。
fileName_
- ファイル名option_
- hiU.KEEP_BOM
を指定するとBOMをスキップしないpublic static BufferedReader openTextFileR(File file_, String charSet_, long option_)
openTextFileR(File,String)
にオプション指定を付加したものです。
file_
- ファイルcharSet_
- 文字セット "utf-8","shift-jis"等,nullの場合はシステム標準option_
- hiU.KEEP_BOM
を指定するとBOMをスキップしないpublic static BufferedReader openTextFileR(File file_, long option_)
openTextFileR(File)
にオプション指定を付加したものです。
file_
- ファイルoption_
- hiU.KEEP_BOM
を指定するとBOMをスキップしないpublic static BufferedOutputStream openBinaryFileW(String fileName_)
// バイナリファイルsample.datを書き出し用にオープンする BufferedOutputStream bos= hiFile.openBinaryFileW("sample.dat"); byte[] data={0x54,0x65,0x73,0x74}; bos.write(data,0,data.length); bos.close();
バイナリ出力用のファイルをオープンします。
フォルダが存在しない場合フォルダも生成します。
BufferedOutputStreamは主にwrite()関数でbyte並びを出力するクラスです。
単純定型手続きをまとめたものです。
次の操作と同等です。
File dir= new File(fileName_).getParentFile(); if( dir!=null&&!dir.exists() ) dir.mkdirs(); BufferedOutputStream bos= new BufferedOutputStream( new FileOutputStream( new File(fileName_) ,false // appendではない ));
BufferedOutputStreamはwrite関数で1バイトずつ、またはbyte配列の出力ができます。
int b;byte buf[128]; bos.write(b); // 1バイト書き出し bos.write(buf,0,128); // 指定長書き出し bos.flush(); // フラッシュ。
fileName_
- ファイル名public static BufferedOutputStream openBinaryFileW(File file_)
openBinaryFileW(String)
のファイル名引数をFileに
置き換えたものです。
フォルダが存在しない場合フォルダも生成します。
file_
- ファイルpublic static BufferedOutputStream openBinaryFileW(URL url_)
url_
- URLpublic static BufferedOutputStream openBinaryFileW(String fileName_, long option_)
// バイナリファイルsample.datを追加モードでオープンする
BufferedOutputStream bos= hiFile.openBinaryFileW("sample.dat",hiU.APPEND);
openBinaryFileW(String)
にオプション指定を付けたものです。
受け付けるオプションはhiU.APPEND
と
hiU.DO_NOT_CREATE_FOLDER
でそれ以外は無視されます。
hiU.APPENDを付けると既存ファイルへの追加モードでオープンします。
デフォルトではフォルダが存在しない場合フォルダも生成しますが、
hiU.DO_NOT_CREATE_FOLDER
を指定すると
生成はしません。
次の手続きとほぼ同等です。
File dir= new File(fileName_).getParentFile(); if( dir!=null&&!dir.exists() ) dir.mkdirs(); BufferedOutputStream bos= new BufferedOutputStream( new FileOutputStream( new File(fileName_) ,true // hiU.APPENDでない場合はfalse ));
fileName_
- ファイル名option_
- hiU.APPEND
,hiU.DO_NOT_CREATE_FOLDER
public static BufferedOutputStream openBinaryFileW(File file_, long option_)
openBinaryFileW(String,long)
のファイル名引数をFileに
置き換えたものです。
デフォルトではフォルダが存在しない場合フォルダも生成します。
ファイルの追加モード指定(hiU.APPEND
)、
フォルダの生成禁止指定(hiU.DO_NOT_CREATE_FOLDER
)
ができます。
file_
- ファイルoption_
- hiU.APPEND
,hiU.DO_NOT_CREATE_FOLDER
public static BufferedInputStream openBinaryFileR(String fileName_)
// バイナリファイルsample.datを読み込み用にオープンする BufferedInputStream bis= hiFile.openBinaryFileR("sample.dat"); int byteData; while( (byteData=bis.read())!=-1 ){ hiU.err.printf("%02x ",byteData); } bis.close();
バイナリ入力用のファイルをオープンします。
BufferedInputStreamは主にread()関数でbyte並びを読み込むクラスです。
単純定型手続きをまとめたものです。
次の手続きと同等です。
BufferedInputStream bis= new BufferedInputStream( new FileInputStream( new File(fileName_))); // bis.close(); // Javaには解体子がないので必ず利用者が後始末をする必要がある
BufferedInputStreamはread関数で1バイトずつ、またはbyte配列への読み込みができます。
int b;byte buf[128];int len; while( (b=bis.read())!=-1 ){...} // 1バイトずつ読み込む while( (len=bis.read(buf,0,128))!=-1 ){...} // バッファに読み込む
fileName_
- ファイル名public static BufferedInputStream openBinaryFileR(File file_)
openBinaryFileR(String)
のファイル名引数をFileに
置き換えたものです。
file_
- ファイルpublic static BufferedInputStream openBinaryFileR(URL url_)
url_
- URLpublic static BufferedReader openResTextFileR(Class class_, String fileName_)
リソース中にあるファイルをテキスト読み込み用にオープンします。
BOMがある場合読み飛ばされます。
リソースの指定は当該リソース中にあるクラスを与えることで行います。
public MyClass { void foo()throws Exception{ BufferedReader br= hiFile.openResTextFileR(MyClass.class ,"sample.txt"); // ... br.close(); // Javaには解体子がないので利用者が後始末 } //.. }
class_
- 当該リソースの中の代表クラスfileName_
- ファイル名public static boolean canOpenResFileR(Class class_, String fileName_)
class_
- 資源を代表するクラスfileName_
- ファイル名public static BufferedReader openResTextFileR(String fileName_)
リソース中にあるファイルをテキスト読み込み用にオープンします。
BOMがある場合読み飛ばされます。
リソースパス上で探索されます。
public MyClass { void foo()throws Exception{ BufferedReader br= hiFile.openResTextFileR("myPkg/test1/sample.txt"); // ... br.close(); // Javaには解体子がないので利用者が後始末 } //.. }
fileName_
- ファイル名public static boolean canOpenResFileR(String fileName_)
fileName_
- ファイル名public static BufferedReader openResTextFileR(Class class_, String fileName_, String charSet_)
public class MyClass { void foo()throws Exception{ BufferedReader br= hiFile.openResTextFileR(MyClass.class ,"sample.txt","shift-jis"); // ... br.close(); // Javaには解体子がないので利用者が後始末 } //.. } このオープン部は BufferedReader br = new BufferedReader( new InputStreamReader( MyClass.class.getResourceAsStream("sample.txt") ,"shift-jis")); と同等です。
BOMがある場合読み飛ばされます。
class_
- 当該リソースの中の代表クラスfileName_
- ファイル名charSet_
- 文字セット;nullまたは"-"の場合システム標準がとられるpublic static BufferedReader openResTextFileR(String fileName_, String charSet_)
public class MyClass { void foo()throws Exception{ BufferedReader br= hiFile.openResTextFileR("myPkg/test1/sample.txt" ,"shift-jis"); // ... br.close(); // Javaには解体子がないので利用者が後始末 } //.. } このオープン部は BufferedReader br = new BufferedReader( new InputStreamReader( Thread.currentThread().getContextClassLoader() .getResourceAsStream("myPkg/test1/sample.txt") ,"shift-jis")); と同等です。
BOMがある場合読み飛ばされます。
fileName_
- ファイル名charSet_
- 文字セット;nullまたは"-"の場合システム標準がとられるpublic static BufferedReader openResTextFileR(Class class_, String fileName_, String charSet_, long option_)
openResTextFileR(Class ,String)
にオプション指定を付加したものです。
class_
- 当該リソースの中の代表クラスfileName_
- ファイル名charSet_
- 文字セット;nullまたは"-"の場合システム標準がとられるoption_
- hiU.KEEP_BOM
を指定するとBOMをスキップしないpublic static BufferedReader openResTextFileR(String fileName_, String charSet_, long option_)
openResTextFileR(String)
にオプション指定を付加したものです。
fileName_
- ファイル名charSet_
- 文字セット;nullまたは"-"の場合システム標準がとられるoption_
- hiU.KEEP_BOM
を指定するとBOMをスキップしないpublic static BufferedInputStream openResBinaryFileR(Class class_, String fileName_)
リソース中にあるファイルをバイナリ読み込み用にオープンします。
リソースの指定は当該リソース中にあるクラスを与えることで行います。
public MyClass { void foo()throws Exception{ BufferedInputStream bis= hiFile.openResBinaryFileR(MyClass.class ,"sample.dat"); // ... bis.close(); // Javaには解体子がないので利用者が後始末 } //.. } このオープン部は BufferedInputStream bis= new BufferedInputStream( MyClass.class.getResourceAsStream("sample.dat")); と同等です。
class_
- リソース(jarなど)内の代表クラスfileName_
- ファイル名public static BufferedInputStream openResBinaryFileR(String fileName_)
リソース中にあるファイルをバイナリ読み込み用にオープンします。
リソースパス上で探索されます。
public MyClass { void foo()throws Exception{ BufferedInputStream bis= hiFile.openResBinaryFileR( ,"myPkg/test1/sample.txt"); // ... bis.close(); // Javaには解体子がないので利用者が後始末 } //.. }
fileName_
- ファイル名public static ArrayList<String> readTextLines(BufferedReader br_)
BufferedReaderから全行読み込み文字列リストを得ます。
次の作業と同等です。
BufferedReader br = ...; // BufferedReader設定 ArrayList<String> lines= new ArrayList<String>(); String line; while( (line=br.readLine())!=null ){ lines.add(line); }
単純作業ですが、使用頻度が高いので関数化しました。
br_
- テキストリーダーpublic static String readTextAll(BufferedReader br_, String eol_)
BufferedReaderから全行読み込み文字を得ます。
行端コード(行区切り)の指定ができます。
--- ファイル1 --- abc\n def --- ファイル2 --- abc\n def\n
次の作業と同等です。
StringBuilder _sb=new StringBuilder(); String _line; String _eol=""; while( (_line=br_.readLine())!=null ){ _sb.append(_eol+_line); _eol=eol_; } return _sb.toString();
単純作業ですが、使用頻度が高いので関数化しました。
br_
- テキストリーダーeol_
- 行端コード異常時にはRuntimeExeptionが送出されます
public static String readTextAll(String fileName_)
各行をArrayList<String>に得るreadTextLines(String)
も用意してあります。
fileName_
- 入力ファイル名異常時にはRuntimeExeptionが送出されます
public static String readTextAll(BufferedReader br_, long option_)
hiU.KEEP_LINE_SEPARATOR
を指定すると改行コードが保持されて読み込まれます。br_
- 入力option_
- hiU.KEEP_LINE_SEPARATOR
public static String readTextAll(BufferedReader br_)
br_
- 入力public static byte[] readBinaryAll(File file_)
file_
- 入力ファイルpublic static byte[] readBinaryAll(String fileName_)
fileName_
- 入力ファイル名public static PrintWriter printLines(PrintWriter pw_, Iterable<String> lines_)
配列などで与えられる文字列並びの各要素を行扱いで出力します。
改行コードはシステム標準が用いられます。
pw_
- 出力先lines_
- 文字列並びpublic static PrintWriter printLines(PrintWriter pw_, Iterable<String> lines_, String eol_)
配列などで与えられる文字列並びの各要素を行扱いで出力します。
改行コードは指定のものが使われます。
pw_
- 出力先lines_
- 文字列並びeol_
- 改行コード;"\n"や"\r\n"などを指定public static ObjectOutputStream openObjectFileW(String fileName_)
フォルダが存在しない場合フォルダも生成されます。
次の操作と同等です。
File dir= new File(fileName_).getParentFile(); if( dir!=null&&!dir.exists() ) dir.mkdirs(); ObjectInputStream oos = new ObjectOutputStream( new BufferedOutputStream( new FileOutputStream( new File(fileName_))));
データをシリアライズして書き込むにはObjectOutputStream.writeObject(Object)を 用います。
// シリアライズ可能なDataClassのオブジェクトdataがあるとして
DataClass data=new DataClass();
data.a1.add(3);data.a1.add(7);data.a2.add("abc");data.a2.add("xyz");
ObjectOutputStream oos=hiFile.openObjectFileW("obj.dat");
oos.writeObject(data);
oos.close();
補足:自クラスをシリアライズ可能にするには
・java.io.Serializableインターフェースをimplementする
・変数を全てシリアライズ可能なものを使う
だけです。StringやArrayListなど殆どのJavaクラスはシリアライズ可能
ですので大概の自作クラスは容易くシリアライズ可能化ができます。
必須ではありませんが、他クラスとぶつかることのないidを設定しておく
ことが推奨されています。idはserialverコマンドで得ることができます。
例えば次のクラスはシリアライズ可能です。
import java.util.ArrayList; public class DataClass implements java.io.Serializable { static final long serialVersionUID = -250094677460676888L; public ArrayList<Integer> a1=new ArrayList<Integer>(); public ArrayList<String> a2=new ArrayList<String>(); public String toString(){ return "(a1="+a1+",a2="+a2+")"; } }
fileName_
- ファイル名public static ObjectOutputStream openObjectFileW(File file_)
openObjectFileW(String)
のファイル名引数をFileに
置き換えたものです。
フォルダが無い場合フォルダも生成します。
file_
- ファイルpublic static ObjectOutputStream openObjectFileW(URL url_)
url_
- URLpublic static ObjectOutputStream openObjectFileW(String fileName_, long option_)
File dir= new File(fileName_).getParentFile(); if( dir!=null&&!dir.exists() ) dir.mkdirs(); ObjectInputStream oos = new ObjectOutputStream( new BufferedOutputStream( new FileOutputStream( new File(fileName_) ,(option_&APPEND)!=0 // hiU.APPEND指定でtrue )));
fileName_
- ファイル名option_
- hiU.APPEND
,hiU.DO_NOT_CREATE_FOLDER
を指定することができます。public static ObjectOutputStream openObjectFileW(File file_, long option_)
openObjectFileW(String,long)
のファイル名引数をFileに
置き換えたものです。
デフォルトではフォルダが存在しない場合フォルダも生成します。
file_
- ファイル名option_
- hiU.APPEND
,
hiU.DO_NOT_CREATE_FOLDER
を指定することができます。public static ObjectInputStream openObjectFileR(String fileName_)
次の操作と同等です。
ObjectInputStream ois = new ObjectInputStream( new FileInputStream( new File(fileName_)));
シリアライズされたデータを読み込むにはObjectInputStream.readObject()を
用います。
readObject()の戻りはObject型なので本来の型にキャストします。
この時@SuppressWarnings("unchecked")で修飾しないと「無検査キャスト」警告が出ます。
// 例えばsample.datにDataClassのデータが入っているとして
ObjectInputStream ois=hiFile.openObjectFileR("sample.dat");
@SuppressWarnings("unchecked") // "[unchecked] 無検査キャスト" 警告を避けるため
DataClass m1=(DataClass)ois.readObject();
ois.close(); // Javaには解体子がないので利用者が後始末
hiU.err.println("m1="+m1);// m1=(a1=[3, 7],a2=[abc, xyz])
// (a1=[3, 7],a2=[abc, xyz])はDataClassのtoString関数
による出力
fileName_
- ファイル名public static ObjectInputStream openObjectFileR(File file_)
openObjectFileR(String)
のファイル名引数をFileに
置き換えたものです。
file_
- ファイル名public static ObjectInputStream openObjectFileR(URL url_)
url_
- URLpublic static ObjectInputStream openResObjectFileR(Class class_, String fileName_)
リソース中にあるファイルをObject読み込み用にオープンします。
リソースの指定は当該リソース中にあるクラスを与えることで行います。
例えばリソースファイル"sample.dat"にMyClassのデータが入っているとして, リソースを代表するクラスがXとして、 public class MyClass { void foo()throws Exception{ ObjectInputStream ois= hiFile.openResObjectFileR(MyClass.class ,"sample.dat"); @SuppressWarnings("unchecked") // 無検査キャスト 警告を避けるため MyClass m1=(MyClass)ois.readObject(); ois.close(); // Javaには解体子がないので利用者が後始末 hiU.err.println("m1="+m1); } //.. } このオープン部は ObjectInputStream bis = new ObjectInputStream( new BufferedInputStream( X.class.getResourceAsStream("sample.dat"))); と同等です。
class_
- リソース(jarなど)内の代表クラスfileName_
- ファイル名public static ObjectInputStream openResObjectFileR(String fileName_)
リソース中にあるファイルをObject読み込み用にオープンします。
リソースの指定は当該リソース中にあるクラスを与えることで行います。
例えばリソースファイル"sample.dat"にMyClassのデータが入っているとして, リソースを代表するクラスがXとして、 public class MyClass { void foo()throws Exception{ ObjectInputStream ois= hiFile.openResObjectFileR( ,"myPkg/test1/sample.sample.dat"); @SuppressWarnings("unchecked") // 無検査キャスト 警告を避けるため MyClass m1=(MyClass)ois.readObject(); ois.close(); // Javaには解体子がないので利用者が後始末 hiU.err.println("m1="+m1); } //.. }
fileName_
- ファイル名public static PrintStream openPrintStream(String fileName_, String charSet_, long option_)
Javaには文字列出力クラスがPrintStreamとPrintWriterの2系列
用意されています。System.out,System.errはPrintStreamであり
ライブラリを利用する立場ではPrintWriterの存在は混乱以外の
なにものでもありません。
開発元であるSUNが
「PrintStreamを使わずPrintWriterを使うべきだ」と言っている
ため本ライブラリはPrintWriterを標準としました。
しかしながら、明らかに混乱の元であり、かつPrintStreamを使って
いる既存ライブラリの存在もあるため、PrintStreamのオープンメソッド
も用意することとしました。
次の操作とほぼ同等です。(実際には例外処理とBOM処理が入っています)
File dir= new File(fileName_).getParentFile(); if( dir!=null&&!dir.exists() ) dir.mkdirs(); PrintStream ps= new PrintStream( new BufferedOutputStream( new FileOutputStream( new File(fileName_) ,(option_&APPEND)!=0 // hiU.APPEND指定でtrue )) ,(option_&APPEND)!=0 // hiU.APPEND指定でtrue ,charSet_); // nullの場合この引数無し
optionにhiU.DO_NOT_CREATE_FOLDER
が指定されている場合、フォルダの生成は行いません。
不正文字コードによりExceptionが発生した場合途中階層の
FileOutputStreamは直ちにcloseされます。APPENDが指定
されておらず、hiU.KEEP_ON_ERROR
が指定されていない場合、ファイルは削除されます。
fileName_
- ファイル名charSet_
- 文字セット。nullまたは""の場合システム標準option_
- hiU.DO_NOT_CREATE_FOLDER
,hiU.APPEND
,hiU.NO_FLUSH
,hiU.KEEP_ON_ERROR
public static PrintStream openPrintStream(File file_, String charSet_, long option_)
Javaには文字列出力クラスがPrintStreamとPrintWriterの2系列
用意されています。System.out,System.errはPrintStreamであり
ライブラリを利用する立場ではPrintWriterの存在は混乱以外の
なにものでもありません。
開発元であるSUNが
「PrintStreamを使わずPrintWriterを使うべきだ」と言っている
ため本ライブラリはPrintWriterを標準としました。
しかしながら、明らかに混乱の元であり、かつPrintStreamを使って
いる既存ライブラリの存在もあるため、PrintStreamのオープンメソッド
も用意することとしました。
次の操作とほぼ同等です。(実際には例外処理とBOM処理が入っています)
File dir= new file_.getParentFile(); if( dir!=null&&!dir.exists() ) dir.mkdirs(); PrintStream ps= new PrintStream( new BufferedOutputStream( new FileOutputStream( file_ ,(option_&APPEND)!=0 // hiU.APPEND指定でtrue )) ,(option_&APPEND)!=0 // hiU.APPEND指定でtrue ,charSet_); // nullの場合この引数無し
デフォルトではフォルダの生成も行います。例外発生時には生成されたフォルダが残る可能性があります。
optionにhiU.DO_NOT_CREATE_FOLDER
が指定されている場合、
フォルダの生成は行いません。
不正文字コードによりExceptionが発生した場合途中階層の
FileOutputStreamは直ちにcloseされます。APPENDが指定
されておらず、hiU.KEEP_ON_ERROR
が指定されていない場合、
ファイルは削除されます。
file_
- ファイルcharSet_
- 文字セット;nullまたは""の場合システム標準option_
- hiU.DO_NOT_CREATE_FOLDER
,hiU.APPEND
,hiU.NO_FLUSH
,hiU.KEEP_ON_ERROR
public static PrintStream openPrintStream(OutputStream outputStream_, String charSet_, long option_)
Javaには文字列出力クラスがPrintStreamとPrintWriterの2系列
用意されています。System.out,System.errはPrintStreamであり
ライブラリを利用する立場ではPrintWriterの存在は混乱以外の
なにものでもありません。
開発元であるSUNが
「PrintStreamを使わずPrintWriterを使うべきだ」と言っている
ため本ライブラリはPrintWriterを標準としました。
しかしながら、明らかに混乱の元であり、かつPrintStreamを使って
いる既存ライブラリの存在もあるため、PrintStreamのオープンメソッド
も用意することとしました。
次の操作とほぼ同等です。(実際には例外処理とBOM処理が入っています)
PrintStream ps= new PrintStream( new BufferedOutputStream( outputStream_) ,(option_&NO_FLUSH)==0 ,charSet_); // nullの場合この引数無し
このメソッドは本来openするものではありませんが、名称を他のopenPrintStream
に揃えました。
Exception発生時にoutputStream_のclose()は行わないことに留意してください。
outputStream_
- ストリーム(ストリームとしてはオープン済みであること)charSet_
- 文字セット;nullまたは""の場合システム標準option_
- hiU.NO_FLUSH
public static BufferedReader asBufferedReader(InputStream is_)
InputStream is= new FileInputStream("test.txt");
BufferedReader br= hiU.asBufferedReader(is);
(通常はBufferedReader br=hiFile.openTextFileR("test.txt")を用いる)
InputStreamからBufferedReaderを得ます。
次の操作と同等です。
BufferedReader br= new BufferedReader( new InputStreamReader( is_ ,"utf-8"));
このメソッドはExceptionは出しません。不正な文字セットの場合は標準エラーに その旨出力した上で、標準文字セットのBufferedReaderを返します。
is_
- 元となるInputStream(System.inなど)public static BufferedReader asBufferedReader(InputStream is_, String charSet_)
// 標準入力を"shift-jis"として読み込む
BufferedReader br= hiU.asBufferedReader(System.in,"shift-jis");
InputStreamからBufferedReaderを得ます。
次の操作と同等です。
BufferedReader br= new BufferedReader( new InputStreamReader( System.in ,"shift-jis"));
このメソッドはExceptionは出しません。不正な文字セットの場合は標準エラーに その旨出力した上で、標準文字セットのBufferedReaderを返します。
is_
- 元となるInputStream(System.inなど)charSet_
- 文字コードpublic static PrintWriter asPrintWriter(OutputStream os_)
PrintStream ps=new PrintStream("sample.txt");
PrintWriter pw= hiU.asPrintWriter(ps); // utf-8,自動フラッシュ
(通常はPrintWriter pw=hiOpenTextFile("sample.txt")とします)
OutputStreamやPrintStreamからPrintWriterを文字セットutf-8指定で作成します。
文字セットをシステム標準としたい場合asPrintWriter(OutputStream,String)
で文字セットにnullを指定してください。
次の操作と同等です。
new PrintWriter( new BufferedWriter( new OutputStreamWriter( os_ ,"utf-8")) ,true);
このメソッドはExceptionは出しません。不正な文字セットの場合は標準エラーに その旨出力した上で、標準文字セットのPrintWriterを返します。
os_
- 元となるOutputStreampublic static PrintWriter asPrintWriter(OutputStream os_, String charSet_)
// 標準出力を"shift-jis"とする
PrintWriter pw= hiU.asPrintWriter(System.out,"shift-jis");
OutputStreamやPrintStreamからPrintWriterを文字セット指定で作成します。
次の操作と同等です。
new PrintWriter( new BufferedWriter( new OutputStreamWriter( os_ ,charSet_)) // nullの場合この引数指定なし ,true);
このメソッドはExceptionは出しません。不正な文字セットの場合は標準エラーに その旨出力した上で、標準文字セットのPrintWriterを返します。
os_
- 元となるOutputStreamcharSet_
- 文字セット;nullを指定するとシステム標準となるpublic static PrintWriter asPrintWriter(OutputStream os_, String charSet_, long option_)
// 標準出力を"shift-jis"とする
PrintWriter pw= hiU.asPrintWriter(System.out,"shift-jis",hiU.NO_FLUSH);
OutputStreamやPrintStreamからPrintWriterを文字セット指定で作成します。
次の操作と同等です。
new PrintWriter( new BufferedWriter( new OutputStreamWriter( os_ ,charSet_)) // nullの場合この引数指定なし ,(option_&hiU.NO_FLUSH)==0);
このメソッドはExceptionは出しません。不正な文字セットの場合は標準エラーに
その旨出力した上で、標準文字セットのPrintWriterを返します。
エラーが発生した場合でも引数のOutputStreamはcloseされません。
os_
- 元となるOutputStreamcharSet_
- 文字セット;nullを指定するとシステム標準となるoption_
- オプション hiU.NO_FLUSH
が指定されると自動フラッシュしないpublic static final String sysCharSet()
次の操作と同等です。
String charset = java.nio.charset.Charset.defaultCharset().name();
public static final int readByte(InputStream is_)
hiU.UnexpectedEOFException
を投げるis_
- 読み込むストリームpublic static final byte[] readBytes(InputStream is_, int len_)
is_
- 読み込むストリームlen_
- 読み込む長さpublic static int readBytes(InputStream is_, byte[] buf_)
is_
- 読み込むストリームbuf_
- 読み込み先配列public static int readBytes(InputStream is_, byte[] buf_, int len_)
is_
- 読み込むストリームbuf_
- 読み込み先配列len_
- 読み込む長さpublic static int tryReadBytes(InputStream is_, byte[] buf_, int len_)
is_
- 読み込むストリームbuf_
- 読み込み先配列len_
- 読み込む長さpublic static int readBytes(InputStream is_, byte[] buf_, int offset_, int len_)
is_
- 読み込むストリームbuf_
- 読み込み先配列offset_
- 配列内の読み込み位置len_
- 読み込む長さpublic static int tryReadBytes(InputStream is_, byte[] buf_, int offset_, int len_)
is_
- 読み込むストリームbuf_
- 読み込み先配列offset_
- 配列内の読み込み位置len_
- 読み込む長さpublic static String trimDots(String absolutePath_)
".."を含むパス名の".."をパスを一段遡る形で消費します。
"//"は/と解釈します。
先頭と最後の/は保持されます。
"/A/B/C//D/../../E/F//../G" -> "/A/B/C/D/../../E/F/../G" -> "/A/B/C/../E/F/../G" -> "/A/B/E/F/../G" -> "/A/B/E/G"
public static String absolutePath(String fileName_)
指定名のファイルのパス名を得ます。指定する名前は 相対名でも構いません。
パスの区切りは"/"で返します。これはWindowsの
"\"はJavaでは文字エスケープであり多くの混乱を
引き起こすためです。
".."は展開されます。例えば"/A/B/C/../D"は"/A/B/D"となります。
本メソッドは次の操作と同等です。
String path= new File(fileName) .getCanonicalPath() .replaceAll("\\\\","/");
ただし、ドライブが接続されていない、実パスが無い状態で、名称が絶対パスとみなされる時は文字列の/変換したものを返します。
fileName_
- ファイル名public static String absolutePath(File file_)
パスの区切りは"/"で返します。これはWindowsの
"\"はJavaでは文字エスケープであり多くの混乱を
引き起こすためです。
".."は展開されます。例えば"/A/B/C/../D"は"/A/B/D"となります。
file_
- ファイルpublic static String parentPath(String fileName_)
指定名のファイルの親のパス名を得ます。指定する名前は 相対名でも構いません。
java.io.FileのgetParent()では"通常"親パスを得ることは
できません。parent()が使えるのは名前がフルパスで
与えられている場合のみで、これは多くのバグを生む
仕様となっています。
また、パスの区切りは"/"で返します。これはWindowsの
"\"はJavaでは文字エスケープであり多くの混乱を
引き起こすためです。
".."は展開されます。例えば"/A/B/C/../D"は"/A/B/D"となります。
本メソッドは次の操作と同等です。
String path= (new File( (new File(fileName)) .getCanonicalPath() )).getParent().replaceAll("\\\\","/");
fileName_
- ファイル名public static String parentPath(File file_)
指定Fileのファイルの親のパス名を得ます。指定する名前は
相対名でも構いません。
パスの区切りは"/"で返します。
".."は展開されます。例えば"/A/B/C/../D"は"/A/B/D"となります。
file_
- ファイルpublic static String path(String fileName_)
fileName_
- ファイル名public static <T,R> R use(hiU.SupplierEx<T,Exception> open_, hiU.FunctionEx<T,R,Exception> use_)
資源がclose()関数を持つ場合、自動でclose()されます。
次の例では
StringBuilder _sb = new StringBuilder(); Stream<String> fileNames = Stream.of("A.txt", "B.txt", "C.txt"); fileNames.forEach( _n_ -> { String _lines=hiFile.use( () -> hiFile.openTextFileR(_n_,hiU.APPEND), (_r_)-> { return "file: "+_n_+"\n"+hiU.readLines(_r_,"\n")+"\n"; } ); _sb.append(_lines); });
T
- 資源の型R
- 戻り値の型open_
- 資源をオープンする手続き。この戻りがuse_の引数となる。use_
- 資源を利用し結果を戻す手続きpublic static <T> void use(hiU.SupplierEx<T,Exception> open_, hiU.ConsumerEx<T,Exception> use_, Consumer<T> close_)
ラムダ関数を用いて資源のオープ用、クローズを行います。
もちろんException発生時にはクローズが動きます。
次の例では
しています。
StringBuilder _sb = new StringBuilder(); Stream<String> fileNames = Stream.of("A.txt", "B.txt", "C.txt"); fileNames.forEach( _n_ -> { hiFile.use( () -> hiFile.openTextFileR(_n_,hiU.APPEND), (_r_)-> { _sb.append("file: "+_n_+"\n"); ArrayList<String> _lines=hiU.readLines(_r_); for(int _idx=0;_idx<_lines.size();++_idx){ _sb.append((_idx+1)+":"+_lines.get(_idx)+"\n"); } }, (_r_)-> hiU.close(_r_) ); });
T
- 資源の型open_
- 資源をオープンする手続き。この戻りがuse_とclose_の引数となるuse_
- 資源を利用する手続きclose_
- 資源をクローズする手続きpublic static void useTextFileW(String fileName_, String charSet_, long option_, hiU.BiConsumerEx<String,PrintWriter,Exception> func_)
PrintWriterをオープンし、ラムダ式を適用、クローズします。
openTextFileW(String,String,long)
のラムダ式+資源管理版です。
ラムダ式がExceptionを投げた場合hiException
にラップされます。
次のように使うことができます。
void foo(String fileName_,PrintWriter pw_)throws Exception{
// ... ファイル出力処理
}
//...
R.useTextFileW(fileName_,"utf-8",hiU.APPEND
,(_n_,_a_)->;foo(_n_,_a_)
);
fileName_
- ファイル名charSet_
- 文字コードセットoption_
- オプション hiU.APPEND 追加モードfunc_
- ラムダ式RuntimeException
- IOエラー、利用者のエラーpublic static void useTextFileW(String fileName_, long option_, hiU.BiConsumerEx<String,PrintWriter,Exception> func_)
PrintWriterをオープンし、ラムダ式を適用、クローズします。
openTextFileW(String,long)
のラムダ式+資源管理版です。
次のように使うことができます。
void foo(String fileName_,PrintWriter pw_)throws Exception{
// ... ファイル出力処理
}
//...
R.useTextFileW(fileName_,hiU.APPEND
,(_n_,_a_)->;foo(_n_,_a_)
);
fileName_
- ファイル名option_
- オプション hiU.APPEND 追加モードfunc_
- ラムダ式RuntimeException
- IOエラー、利用者のエラーpublic static void useTextFileW(String fileName_, String charSet_, hiU.BiConsumerEx<String,PrintWriter,Exception> func_)
PrintWriterをオープンし、ラムダ式を適用、クローズします。
openTextFileW(String,String)
のラムダ式+資源管理版です。
次のように使うことができます。
void foo(String fileName_,PrintWriter pw_)throws Exception{
// ... ファイル出力処理
}
//...
R.useTextFileW(fileName_,"utf-8"
,(_n_,_a_)->;foo(_n_,_a_)
);
fileName_
- ファイル名charSet_
- 文字コードセットfunc_
- ラムダ式RuntimeException
- IOエラー、利用者のエラーpublic static void useTextFileW(String fileName_, hiU.BiConsumerEx<String,PrintWriter,Exception> func_)
PrintWriterをオープンし、ラムダ式を適用、クローズします。
openTextFileW(String)
のラムダ式+資源管理版です。
次のように使うことができます。
void foo(String fileName_,PrintWriter pw_)throws Exception{
// ... ファイル出力処理
}
//...
R.useTextFileW(fileName_,
,(_n_,_a_)->;foo(_n_,_a_)
);
fileName_
- ファイル名func_
- ラムダ式RuntimeException
- IOエラー、利用者のエラーpublic static void useTextFileW(URL url_, String charSet_, hiU.BiConsumerEx<URL,PrintWriter,Exception> func_)
PrintWriterをオープンし、ラムダ式を適用、クローズします。
openTextFileW(URL,String)
のラムダ式+資源管理版です。
次のように使うことができます。
void foo(URL url_,PrintWriter pw_)throws Exception{ // ... ファイル出力処理 } //... URL _url=...; R.useTextFileW(_url,"utf-8",hiU.APPEND,(_n_,_a_)->foo(_n_,_a_));
url_
- URLcharSet_
- 文字コードセットfunc_
- ラムダ式RuntimeException
- IOエラー、利用者のエラーpublic static void useTextFileW(URL url_, hiU.BiConsumerEx<URL,PrintWriter,Exception> func_)
PrintWriterをオープンし、ラムダ式を適用、クローズします。
openTextFileW(URL)
のラムダ式+資源管理版です。
void foo(URL url_,PrintWriter pw_)throws Exception{ // ... ファイル出力処理 } //... URL _url=...; R.useTextFileW(_url,hiU.APPEND,(_n_,_a_)->foo(_n_,_a_));
url_
- URLfunc_
- ラムダ式RuntimeException
- IOエラー、利用者のエラーpublic static void useTextFileR(String fileName_, String charSet_, long option_, hiU.BiConsumerEx<String,BufferedReader,Exception> func_)
BufferedReaderをオープンし、ラムダ式を適用、クローズします。
openTextFileR(String,String,long)
のラムダ式+資源管理版です。
次のように使うことができます。
void foo(String fileName_,BufferedReader pw_)throws Exception{ // ... ファイル入力処理 } //... R.useTextFileR(fileName_,"utf-8",hiU.APPEND,(_n_,_a_)->foo(_n_,_a_));
fileName_
- ファイル名charSet_
- 文字コードセットoption_
- オプション hiU.APPEND 追加モードfunc_
- ラムダ式RuntimeException
- IOエラー、利用者のエラーpublic static void useTextFileR(String fileName_, long option_, hiU.BiConsumerEx<String,BufferedReader,Exception> func_)
BufferedReaderをオープンし、ラムダ式を適用、クローズします。
openTextFileR(String,long)
のラムダ式+資源管理版です。
次のように使うことができます。
void foo(String fileName_,BufferedReader pw_)throws Exception{ // ... ファイル入力処理 } //... R.useTextFileR(fileName_,hiU.APPEND,(_n_,_a_)->foo(_n_,_a_));
fileName_
- ファイル名option_
- オプション hiU.APPEND 追加モードfunc_
- ラムダ式RuntimeException
- IOエラー、利用者のエラーpublic static void useTextFileR(String fileName_, String charSet_, hiU.BiConsumerEx<String,BufferedReader,Exception> func_)
BufferedReaderをオープンし、ラムダ式を適用、クローズします。
openTextFileR(String,String)
のラムダ式+資源管理版です。
次のように使うことができます。
void foo(String fileName_,BufferedReader pw_)throws Exception{ // ... ファイル入力処理 } //... R.useTextFileR(fileName_,"utf-8",(_n_,_a_)->foo(_n_,_a_));
fileName_
- ファイル名charSet_
- 文字コードセットfunc_
- ラムダ式RuntimeException
- IOエラー、利用者のエラーpublic static void useTextFileR(String fileName_, hiU.BiConsumerEx<String,BufferedReader,Exception> func_)
BufferedReaderをオープンし、ラムダ式を適用、クローズします。
openTextFileR(String)
のラムダ式+資源管理版です。
使い方はuseTextFileR(String,String,long,hiU.BiConsumerEx)
を参照してください。
fileName_
- ファイル名func_
- ラムダ式RuntimeException
- IOエラー、利用者のエラーpublic static void useTextFileR(URL url_, String charSet_, hiU.BiConsumerEx<URL,BufferedReader,Exception> func_)
BufferedReaderをオープンし、ラムダ式を適用、クローズします。
openTextFileR(URL,String)
のラムダ式+資源管理版です。
次のように使うことができます。
void foo(URL url_,BufferedReader pw_)throws Exception{ // ... ファイル出力処理 } //... URL _url=...; R.useTextFileR(_url,"utf-8",(_n_,_a_)->foo(_n_,_a_));
url_
- URL
func_
- ラムダ式RuntimeException
- IOエラー、利用者のエラーpublic static void useTextFileR(URL url_, hiU.BiConsumerEx<URL,BufferedReader,Exception> func_)
BufferedReaderをオープンし、ラムダ式を適用、クローズします。
openTextFileR(URL)
のラムダ式+資源管理版です。
次のように使うことができます。
void foo(URL url_,BufferedReader pw_)throws Exception{ // ... ファイル出力処理 } //... URL _url=...; R.useTextFileR(_url,(_n_,_a_)->foo(_n_,_a_));
url_
- URLfunc_
- ラムダ式RuntimeException
- IOエラー、利用者のエラーpublic static String readTextAll(hiU.SupplierEx<BufferedReader,Exception> func_, String eol_)
ラムダ関数で指定されるオープン手続きでBufferedReaderをオープンし、
readTextAll(BufferedReader,String)
で全行読み込んだあとクローズします。
String _text=hiFile.readTextAll(()->hiFile.openResTextFileR("data.txt"),"\n");
単純にhiFile.openTextFileR("data.txt")でオープンし、改行を"\n"とする場合はhiFile.readTextAll("data.txt")
が使用可能です。
func_
- オープン手続きeol_
- 行端コード 各行の後ろに付けるコードpublic static String readTextAll(hiU.SupplierEx<BufferedReader,Exception> func_, long option_)
String _text=hiFile.readAll(()->hiFile.openTextFileR("data.txt","shift-jis"),hiU.KEEP_LINE_SEPARATOR);
単純にhiFile.openTextFileR("data.txt")でオープンし、改行を"\n"とする場合はhiFile.readTextAll("data.txt")
が使用可能です。
func_
- オープン手続きoption_
- hiU.KEEP_LINE_SEPARATOR
public static ArrayList<String> readTextLines(hiU.SupplierEx<BufferedReader,Exception> func_)
ラムダ関数で指定されるオープン手続きでBufferedReaderをオープンし、全行読み込みます。
ArrayList<String> _lines=hiFile.readList(()->hiFile.openTextFileR("data.txt","shift-jis"));
単純にhiFile.openTextFileR("data.txt")でオープンする場合はhiFile.readTextAll("data.txt")
が使用可能です。
func_
- オープン手続きpublic static void printLines(hiU.SupplierEx<PrintWriter,Exception> func_, Iterable<String> lines_, String eol_)
ラムダ関数で指定されるオープン手続きでBufferedReaderをオープンし、
printLines(PrintWriter,Iterable,String)
で全行出力した後クローズします。
ArrayList<String> _lines=... hiFile.printLines(()->hiFile.openTextFileW("tet.txt",_lines,"\n");
func_
- オープン手続きlines_
- 行並びeol_
- 行端コード 各行の後ろに付けるコードpublic static void printLines(hiU.SupplierEx<PrintWriter,Exception> func_, Iterable<String> lines_)
ラムダ関数で指定されるオープン手続きでBufferedReaderをオープンし、
printLines(PrintWriter,Iterable,String)
で全行出力した後クローズします。
ArrayList<String> _lines=... hiFile.printLines(()->hiFile.openTextFileW("tet.txt",_lines);
func_
- オープン手続きlines_
- 行並びpublic static void println(hiU.SupplierEx<PrintWriter,Exception> func_, String lines_)
ラムダ関数で指定されるオープン手続きでBufferedReaderをオープンし、 println()で全行出力した後クローズします。
String _lines=... hiFile.println(()->hiFile.openTextFileW("tet.txt",_lines);
func_
- オープン手続きlines_
- 行並びpublic static void skip(BufferedInputStream bis_, long len_)
とても不思議なことにBufferedInputStream
のskipは指定長読み飛ばすとは限らず、指定長読み飛ばすには利用者が繰り返し呼び出す必要があります。
指定長読み飛ばす関数を用意しました。
次の手続きと同様です。
long _rlen; while( len_>0 && ((_rlen=bis_.skip(len_))!=-1) ) len_ -= _rlen;
bis_
- 読み込み対象len_
- 長さhiException
- EOFExceptionなどpublic static void skip(RandomAccessFile raf_, long len_)
とても不思議なことにRandomAccessFile.skipBytes(int)
の引数はintとなっています。
longで読み飛ばす関数を用意しました。
次の手続きと同様です。
long _rem=len_; while( _rem>0 ){ if( _rem<0x7FFFFFFF ){ _rem -= raf_.skipBytes((int)_rem); } else{ _rem -= raf_.skipBytes(0x7FFFFFFF); } }
raf_
- 読み込み対象ファイルlen_
- 長さhiException
- EOFExceptionなどpublic static String readTextAll(String fileName_, String eol_)
指定名のテキストファイルをオープンし全行読み取ります。
行の区切りは引数のeol_になります。
fileName_
- ファイル名eol_
- 行端として付加する文字列public static String readTextAll(File file_, String eol_)
指定Fileをオープンし全行読み取ります。
file_
- ファイルeol_
- 行端として付加する文字列public static String readTextAll(File file_)
指定Fileをオープンし全行読み取ります。
行の区切りは"\n"になります。
file_
- ファイルpublic static ArrayList<String> readTextLines(String fileName_)
指定名のテキストファイルをオープンし全行読み取ります。
fileName_
- ファイル名public static ArrayList<String> readTextLines(File file_)
指定Fileをオープンし全行読み取ります。
file_
- ファイル