4

レジストリ データを変更する .java ファイルを作成しました。しかし、存在する行で「不正なエスケープ文字」エラーが発生しRuntime.getRuntime().execます。私の間違いはどこですか?

import java.util.*;
import java.applet.Applet; 
import java.awt.*; 

class test {
  public static void main(String args[]) {
      try {
          Runtime.getRuntime().exec("REG ADD 'HKCU\Software\Microsoft\Internet Explorer\Main' /V 'Start Page' /D 'http://www.stackoverflow.com/' /F");
      } catch (Exception e) {
          System.out.println("Error ocured!");
      }
  }
}
4

6 に答える 6

18

パスで使用されているバックスラッシュをエスケープする必要があります。

String windowsPath = "\\Users\\FunkyGuy\\My Documents\\Hello.txt";
于 2012-10-15T04:25:14.923 に答える
5

\別のでエスケープする必要があるため、入力文字列をに\置き換えます。\\\

于 2012-10-15T04:25:35.963 に答える
3

レジストリ パス文字列のバックスラッシュ文字をエスケープする必要があります。

"REG ADD `HKCU\\Software\\ ...

バックスラッシュ文字は、文字列内で特別な意味を持ちます: エスケープ文字を導入するために使用されます。文字列で文字通り使用したい場合は、二重のバックスラッシュを使用してエスケープする必要があります。

于 2012-10-15T04:25:23.270 に答える
2

Java のバック スラッシュは特殊な「エスケープ」文字であり、タブ\t\n改行などの楽しいものを含めることができます。

言うまでもなく、追加\文字を追加してそれらを「エスケープ」することもできます...

'HKCU\\Software\\Microsoft\\Internet Explorer\\Main'

余談ですが。私はProcessBuilderを使用するか、少なくとも配列引数Runtime#execを使用するバージョンを使用します。

コマンドパラメーター内のスペースを処理する場合、多くの手間が省けます。

于 2012-10-15T04:29:45.810 に答える
1

\エスケープを置き換える必要があります\\

以下のコードが動作します

Runtime.getRuntime().exec("REG ADD 'HKCU\\Software\\Microsoft\\Internet Explorer\\Main' /V 'Start Page' /D 'http://www.stackoverflow.com/' /F");
于 2012-10-15T04:29:55.160 に答える
1

おそらく、文字列のバックスラッシュをエスケープしなかったためです。適切なエスケープの詳細については、http://docs.oracle.com/javase/tutorial/java/data/characters.htmlを参照してください。

于 2012-10-15T04:26:15.717 に答える