入出力機能を持ったファイルクラス

package org.dyndns.rhmusic;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/**
* 入出力機能を持ったファイルクラス
*
@author Paradigm-Shift
*/
public class FileRh extends File{

 
/**
   * シリアルバージョンID
   */
 
private static final long serialVersionUID = -2843662886836357164L;
 
 
/** ファイル名 */
 
private String path;
 
/** エンコード */
 
private String encode = System.getProperty("file.encoding");
 
/** 改行文字 */
 
private String lineFeed = System.getProperty("line.separator");

 
/**
   * ファイル名を指定してオブジェクトを生成
   *
@param pathname ファイル名
   */
 
public FileRh(final String pathname) {
   
   
super(pathname);
   
this.path = pathname;
 
}
 
 
/**
   * ファイル名とエンコードを指定してオブジェクトを生成
   *
@param pathname ファイル名
   *
@param encode エンコード
   */
 
public FileRh(final String pathname, final String encode) {
   
   
super(pathname);
   
this.path = pathname;
   
this.encode = encode;
 
}
 
/**
   * ファイル名とエンコード、改行文字を指定してオブジェクトを生成
   *
@param pathname ファイル名
   *
@param encode エンコード
   *
@param lf 改行文字
   */
 
public FileRh(final String pathname, final String encode, final String lf) {
   
   
super(pathname);
   
this.path = pathname;
   
this.encode = encode;
   
this.lineFeed = lf;
 
}

 
/**
   * ファイルの内容を文字列で取得する
   *
@param inlf 改行文字。nullの場合、システムのデフォルト改行文字が使用される。
   *
@param enc エンコード。nullの場合、システムのデフォルト文字コードが使用される。
   *
@return
  
*/
 
public String readFile(final String inlf, final String inenc) {
   
   
String lf = inlf;
    String enc = inenc;
   
   
if (lf == null) {
     
lf = this.lineFeed;
   
} else if(enc == null) {
     
enc = this.encode;
   
}
   
   
return read(inlf, enc);
 
}
 
 
/**
   * ファイルの内容を文字列で取得する
   *
@return ファイルの内容
   */
 
public String readFile() {
   
   
return read(this.lineFeed, this.encode);
 
}

 
/**
   * ファイルの内容を文字列で取得する
   *
@param lineFeed 改行文字
   *
@param encode エンコード
   *
@return ファイルの内容
   */
 
private String read(final String lf, final String encode) {
   
   
BufferedReader reader = null;
    FileInputStream fileInputStream =
null;
    StringBuilder message =
null;
   
   
try {
     
fileInputStream = new FileInputStream(this.path);
     
final String enc = encode;

      reader =
new BufferedReader(new InputStreamReader(fileInputStream, enc));
     
final String lfCd = lf;

      message =
new StringBuilder();
      String line;
     
     
while ((line = reader.readLine()) != null) {
       
message.append(line).append(lfCd);
     
}
    }
catch (final FileNotFoundException e) {
     
e.printStackTrace();
   
} catch (final IOException e) {
     
e.printStackTrace();
   
} finally {
     
try {
       
if (reader != null) {
         
reader.close();
       
}
      }
catch (final Exception e) {
       
e.printStackTrace();
     
}
    }
   
return message.toString();
 
}

 
/**
   *
   *
@param isOverWrite 上書きするかどうか。 true 上書き, false 追記
   *
@param inMassage ファイルに書き込む文字列
   *
@param エンコード。nullの場合、システムのデフォルト文字コードが使用される。
   *
@return 正常に出力されればtrue
   *
@throws IOException
   */
 
public boolean writeFile(final boolean isOverWrite, final String message, final String enc) throws IOException {

   
if (message == null) {
     
throw new IOException("ファイルの内容が空です。");
   
}

   
return write(message, enc, isOverWrite);
 
}

 
/**
   * ファイルに出力する
   *
@param message 出力する文字列
   *
@param enc エンコード
   *
@param isOverWrite  上書きするかどうか。 true 上書き, false 追記
   *
@return 正常に出力されればtrue
   */
 
private boolean write(final String message, final String enc, boolean isOverWrite) {

   
FileOutputStream fileOutputStream = null;
    OutputStreamWriter outputStreamWriter =
null;
    BufferedWriter bufferedWriter =
null;

   
try {
     
     
fileOutputStream = new FileOutputStream(this.path, !isOverWrite);//第2引数が[true]の場合は追記、[false]にすると上書き
     
outputStreamWriter = new OutputStreamWriter(fileOutputStream, enc);
      bufferedWriter =
new BufferedWriter(outputStreamWriter);
     
     
//ファイルが無ければ生成し、あればそのファイルに追記
     
bufferedWriter.write(message);
     
   
} catch (final Exception e) {
     
e.printStackTrace();
   
} finally {
     
try {
       
bufferedWriter.close();
        outputStreamWriter.close
();
        fileOutputStream.close
();
     
} catch (final IOException e) {
       
e.printStackTrace();
     
}
    }
   
   
return true;
 
}
}

Java TipsのTOPに戻る