タグ

FIOとjavaに関するkiyo_hikoのブックマーク (7)

  • Javaで1行ずつテキストデータを読み込むイディオムの変遷 - argius note

    テキストデータを読み込む場合、言語にかかわらず1行ずつ読み込んで処理します。ここではこのイディオムを"read-lines"と呼ぶことにします。 スクリプト言語なんかだと大抵、最初からforeachで済んでしまっていたりしますが、初期のJavaではちょっと面倒な手順が必要でした。 新しいバージョンではだいぶ簡単簡潔に書けるようになりましたが、今度はたくさんありすぎて、どれがなんなのかが良くわからなくなっています(大袈裟)。 そこで今回は、"read-lines"の変遷についてまとめてみました。 最近Javaを始めた方がバージョンが古い時に書かれたソースコードを読むときに役に立つ...かも知れません。 目次 基 BufferedReader (Java1.1~) Scannerと拡張for文 (Java5~) java.nio.file.Filesとtry-with-resources(J

    Javaで1行ずつテキストデータを読み込むイディオムの変遷 - argius note
    kiyo_hiko
    kiyo_hiko 2015/06/07
    BufferedReader使う勢だった
  • Java7 New Features and Code Examples

    kiyo_hiko
    kiyo_hiko 2014/05/27
    Bracket Notation for Collection → ? // <<Interface>> java.lang.AutoClosable // Path p = Paths.get(url); Files.write(p, ss, Charset.forName("UTF-8"), StandardOpenOption.WRITE); // cf. http://www.ne.jp/asahi/hishidama/home/tech/java/files.html
  • JavaでUTF-8のBOMに対処する - 万象酔歩

    この記事は「 Javaでファイルオープン:文字コードや追加モードなど」の補助記事です。 JavaでBOM付きUTF-8ファイルを読む 媒体上の文字コード規格、UTF-8には、規格策定者の迷いのため 一時期、先頭に3バイトのBOMと呼ばれる、バイト並び識別マーク を置く仕様がありました。 現在はBOMはまず使われることはありませんが、Windows付属の「メモ帳」という 簡易エディタでUTF-8ファイルをうっかり作成してしまうと、ファイル先頭に BOMが付いてしまいます。 残念なことにJavaではBOM付きのUTF-8ファイルをまともに 読むことができません。 先頭がBOMの場合スキップする方法 対処法は色々考えられますが、ここでは、BufferedInputStreamを被せ、 先頭がBOMの場合スキップし、BOMでない場合先頭まで巻き戻す形を 示します。 import java.io.*

    JavaでUTF-8のBOMに対処する - 万象酔歩
    kiyo_hiko
    kiyo_hiko 2013/08/28
    「BOMはまず使われることはありません…メモ帳という 簡易エディタでUTF-8ファイルをうっかり作成してしまうと…BOMが付いてしまいます。残念なことにJavaではBOM付きのUTF-8ファイルをまともに 読むことができません」
  • ファイルかディレクトリかを判定する(Files.isDirectory)

    ディレクトリかどうかを判定する Path オブジェクトが表しているものがディレクトリかどうかを判定するには Files クラスで用意されている isDirectory メソッドを使用します。 isDirectory メソッドはクラスメソッドです。書式は次のとおりです。 パラメータ: path - テストするファイルへのパス options - シンボリック・リンクの処理方法を示すオプション 戻り値: ファイルがディレクトリである場合はtrue。ファイルが存在しないか、ディレクトリでないか、またはファイルがディレクトリかどうかを判断できない場合はfalse 例外: SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされていて、そのcheckReadメソッドがファイルへの読取りアクセスを拒否する場合 1 番目の引数に判定する対象の Path

    ファイルかディレクトリかを判定する(Files.isDirectory)
  • テキストファイルへの同時書き込みを防ぐ

    テキストファイルに対する入出力は極めて簡単なものです。しかし、複数のユーザーが同時にアクセスする可能性があるWebアプリケーションにおける活用においては、重大な落とし穴があることも知っておくべきでしょう。 つまり、ファイルに対する同時書き込みの制御です。データベースであれば、トランザクションや排他ロックなどのしくみがデータベースサーバ自体にあらかじめ備わっていますが、単なるテキストファイルとなると、そのような状況はまったく考慮されていません。そのため、もしも複数のユーザが同時に同一のファイルを開き、書き込み処理を行おうとすれば、思わぬ不整合が生じる可能性があるというわけです。 そこで、テキストファイルの処理に際しては、必ず同時書き込みを防止するロックのしくみを「アプリケーション側」で組み込む必要があります。synchronizedキーワードや、サーブレットではjavax.servlet.S

    テキストファイルへの同時書き込みを防ぐ
  • XML > XMLにインデントを含めて、きれいに出力したい

    動作環境 このページでは以下の環境での動作を説明しています。 J2SDK 5.0 Update8 xalan 2.7.0 DOMの作成 出力対象のDOMオブジェクトを作成します。 Document document = DocumentBuilderFactory.newInstance() .newDocumentBuilder() .newDocument(); Element elementEmployers = document.createElement("employers"); Element elementEmployer = document.createElement("employer"); Element elementEmployerName = document.createElement("name"); Text txtEmployerNa

  • JavaのFileクラスは不変(immutable)クラスという点に関する注意点 - 達人プログラマーを目指して

    長年Javaを書いてきた人間としてはちょっと情けないことに、先日、会社で自分の書いたコードが原因でちょっとしたバグを出してしまいました。きちんとテストファーストで単体試験は書いていたのですがテストが不十分でしたね。 バグの原因は、Fileクラスの仕様をちょっと勘違いして使っていたことが原因でした。FileクラスにはrenameTo()というメソッドがあって、このメソッドの呼び出しにより、操作が成功すればもともとFileクラスのオブジェクトに対応していたファイルの名前がファイルシステム上で変更されます。ここで、うっかり、Fileクラスが可変なクラスだと勘違いしてしまっていたのですが、実は、Java Docにも明記されている通り、Fileクラスは不変(immutable)なクラスであり、一度生成したら状態が決して変更されることがない設計となっています。これは、以下のテストケースを見ると確認でき

    JavaのFileクラスは不変(immutable)クラスという点に関する注意点 - 達人プログラマーを目指して
    kiyo_hiko
    kiyo_hiko 2011/07/13
    JavaのFileクラスはimmutableで、renameToを使って実体ファイル名を変更しても、Fileクラスが持っている名前は変わらんという話。参照先がなくてもFileオブジェクトを参照できる仕様を考えれば不自然はないけど注意したいところ
  • 1