- - PR -
デスクトップフォルダの文字化け
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-04-01 14:53
こんにちは。初めての投稿です。
宜しくお願いします。 デスクトップパスを取得してFileクラスを生成したいです。 ソースコードです。 public static void main(String s[]) { String cmdline = "reg query \\\\"HKCU\\\\\\\\Software\\\\\\\\Microsoft\\\\\\\\Windows\\\\\\\\CurrentVersion\\\\\\\\Explorer\\\\\\\\Shell Folders\\\\" /v Desktop"; try { String line; Process p = Runtime.getRuntime().exec(cmdline); BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); while ((line = input.readLine()) != null) { System.out.println(line); } input.close(); } catch (Exception err) { err.printStackTrace(); } } 多分、"デスクトップ"が"ƒfƒXƒN"になってFile.existもfalseになると思いますが... 対応策をご存知の方がいらっしゃいましたら、ご教示お願いします。 |
|
投稿日時: 2008-04-01 15:26
本当にこれ、実行したの?
全角スペースが入ってるのはともかく、\(¥)の数も合ってないし。 そもそもregは、ファイルパスと違って、余計なセパレータがはいってると 受け付けてくれないみたいね。 んで実行した結果。 文字化けは起こらないけど、パスの表示が途中でちょん切られます。 まあ、CUIにはよくあることだね。 結果も複数行にかけて表示されるし、この結果から望みのパスを取得するのは面倒くさそうだ。 環境変数からUSERPROFILEを取得した方が簡単だろうな。 |
|
投稿日時: 2008-04-01 16:17
¥の数は@ITのバグでむやみに増えたりするんでそっちのような気がしますね。
exec()の結果を取る時点でエンコードは何で返っていますか? InputStreamReaderでちゃんとエンコード指定しましょう。 |
|
投稿日時: 2008-04-01 17:16
これはWindowsの出力画面が特別なことをしているような気がします.
コマンドラインで(全角の¥にしてます) reg query "HKCU¥Software¥Microsoft¥Windows¥CurrentVersion¥Explorer¥Shell Folders¥" /v Desktop とすると Desktop REG_SZ C:¥Documents and Settings¥xxx¥デスクトップ となりますが reg query "HKCU¥Software¥Microsoft¥Windows¥CurrentVersion¥Explorer¥Shell Folders¥" /v Desktop > a.txt でファイルに出力すると Desktop REG_SZ C:¥Documents and Settings¥xxx¥デスク となり、Javaの標準出力ではファイル出力のようにデータを表示しています。 なので、コマンドを考え直すべきと思います。 |
|
投稿日時: 2008-04-01 17:27
reg queryをJavaから実行してみると
結果に日本語が混ざっている場合 混ざっている日本語文字数/2バイトが 削られてしまうようですね Process#getInputStreamをreadした結果から既に 欠落している感じなので reg queryを使っての取得は諦めた方がいいかも もしくは削れることを前提として デスク で終わったら デスクトップ という風に変換してあげるといいかもしれません >Edosson様 全角スペースは見やすくした結果かと思われますし ////はここの掲示板の困った仕様なので仕方ないかと思います。 |
|
投稿日時: 2008-04-02 10:30
回答ありがとうございます。
|
1