Javaの1.4から追加されたという、Channelを使って下記を行うよよよ。
・書き込み
・読み込み
・コピー
・書き・読みの際のエンコーディング
〜おまけ〜
Channelが無かった(知らなかった)時に作った、読み書きメソッドを公開。
注:使用は自己責任(バグっても責任は取りません。)
・読み書きメソッド
・書き込み
・読み込み
・コピー
・書き・読みの際のエンコーディング
〜おまけ〜
Channelが無かった(知らなかった)時に作った、読み書きメソッドを公開。
注:使用は自己責任(バグっても責任は取りません。)
・読み書きメソッド
/** * ファイル書き出しメソッド * 引数1:String path → ファイル名までのPath(C:\test.txt) * 引数2:String data → 中に書き込むデータ * */ public void writeFile(String path ,String data) throws IOException { FileChannel srcChannel = null; try { // FileOutputStreamからChannelをゲットする。 srcChannel = new FileOutputStream(new File(path)).getChannel(); // String dataをByteBufferに変換する。 ByteBuffer buffer = ByteBuffer.wrap(data.getBytes()); // 書き込むヨヨよい srcChannel.write(buffer); } catch (IOException e) { throw e; } finally { try { srcChannel.close(); } catch (Exception e) { e.printStackTrace(); } } }
/** * ファイル読み込みメソッド * 引数1:String path → ファイル名までのPath(C:\test.txt) * 戻り値:String → ファイルの中身をString変換したもの * */ public String readFile(String path) throws IOException { FileChannel srcChannel = null; try { // FileInputStreamからChannelをゲットする。 srcChannel = new FileInputStream(new File(path)).getChannel(); // ファイルサイズ文のBufferを確保する ByteBuffer buffer = ByteBuffer.allocate((int) srcChannel.size()); // BufferにChannelを読み込ませる srcChannel.read(buffer); // なんかおまじない(ぇ buffer.clear(); return buffer.toString(); } catch (IOException e) { throw e; } finally { try { srcChannel.close(); } catch (Exception e) { e.printStackTrace(); } } }
/** * ファイルコピーメソッド * 引数1:String srcPath → コピー元のファイル名までのPath(C:\test.txt) * 引数2:String destPath → コピー先のファイル名までのPath(C:\test.txt) * */ public void copyFile(String srcPath , String destPath) throws FileNotFoundException, IOException { FileChannel srcChannel = null, destChannel = null; try { // RandomAccessFileで読み取り専用で開き、Channelを取得する srcChannel = new RandomAccessFile(new File(srcPath ), "r").getChannel(); // RandomAccessFileで読み取りおよび書き込み用に開き、Channelを取得する destChannel = new RandomAccessFile(new File(destPath), "rw").getChannel(); // コピー元ファイルをメモリにマップ ByteBuffer buffer = srcChannel.map(FileChannel.MapMode.READ_ONLY, 0, srcChannel.size()); destChannel.write(buffer); } catch (FileNotFoundException e) { throw e; } catch (IOException e) { throw e; } finally { try { srcChannel.close(); } catch (Exception e) { e.printStackTrace(); } try { destChannel.close(); } catch (Exception e) { e.printStackTrace(); } } }
private String encoding = "UTF-8" // クラス変数 /** * 文字コード変更メソッド * 引数1:String encoding → 書き込み際に指定する文字コード(MS932 とか SJIS) * */ public void setMojiCode(String encoding) { this.encoding = encoding; } /** * String→encodeしてbufferに変換 * 引数1:String data → 書き込むデータ * */ private ByteBuffer encodeStr(String data) { CharBuffer chbuf = CharBuffer.wrap(data); Charset charset = Charset.forName(this.encoding); // Charset#encode を使用 return charset.encode(chbuf); } /** * buffer→encodeしてStringに変換 * 引数1:ByteBuffer data → 読み込んだデータ * */ private String encodeBuf(ByteBuffer data) { Charset charset = Charset.forName(this.encoding); // Charset#decode を使用 return charset.decode(data).toString(); }
// ファイル書き込み Channel使わない版 public void writeFileNotUseChannel(String path, String data, boolean flg) throws IOException { BufferedWriter buffer = null; try { // 文字をバッファリングすることによって、 // 効率良く文字型出力ストリームに書き込みます。 buffer = new BufferedWriter( // OutputStreamWriterの第2引数にエンコードを指定します。 new OutputStreamWriter( // FileOutputStreamの第2引数にそのファイルに対して追記するかどうかのboolean値を指定 new FileOutputStream(new File(path), flg), this.encoding)); buffer.write(data); } catch (IOException e) { throw e; } finally { try { if (buffer != null) { buffer.close(); } } catch (Exception e) { e.printStackTrace(); } } } // ファイル読み出し Channel使わない版 public String readFileNotUseChannel(String path) throws IOException { StringBuilder builder = null; BufferedReader buffer = null; try { // 文字、配列、行をバッファリングすることによって、 // 文字型入力ストリームからテキストを効率良く読み込みます buffer = new BufferedReader( // InputStreamReaderの第2引数にエンコードを指定します。 new InputStreamReader( // FileOutputStreamの第2引数にそのファイルに対して追記するかどうかのboolean値を指定 new FileInputStream(new File(path)), this.encoding)); String str = buffer.readLine(); if (str != null) { // 1行目をStringBuilderに連結 builder.append(str); while ((str = buffer.readLine()) != null) { // readLine()で取得できるだけ、 // StringBuilderに連結 builder.append(str); } return builder.toString(); } else { return null; } } catch (IOException e) { throw e; } finally { try { if (buffer != null) { buffer.close(); } } catch (Exception e) { e.printStackTrace(); } } }
このページへのコメント
4Egr7F Hey, thanks for the blog article.Thanks Again.
HaQEIw <a href="http://lquwpiyzvcbz.com/">lquwpiyzvcbz</a>, [url=http://rrdwkzfozkfu.com/]rrdwkzfozkfu[/url], [link=http://vshjuiltrrha.com/]vshjuiltrrha[/link], http://xkeqfkydmisw.com/