Java和Windows - 错误:非法转义字符

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!");
      }
  }
}
6个回答

18

你需要转义路径中使用的反斜杠

String windowsPath = "\\Users\\FunkyGuy\\My Documents\\Hello.txt";

5

在输入的字符串中,你需要用另一个 \ 转义 \,所以要将 \ 替换为 \\


3

您需要转义注册表路径字符串中的反斜杠字符:

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

在字符串中,反斜杠字符具有特殊含义:它用于引入转义字符。如果您要在字符串中直接使用反斜杠,则需要使用双反斜杠进行转义。


2
在Java中,反斜杠是特殊的“转义”字符,它们提供了包括制表符\t和/或换行符\n以及许多其他有趣的内容的能力。
不用说,你也需要通过添加额外的\字符来“转义”它们...
'HKCU\\Software\\Microsoft\\Internet Explorer\\Main'

顺便说一下,我会使用ProcessBuilder或至少使用使用数组参数Runtime#exec版本。
在处理命令参数中的空格时,这将节省很多麻烦,我个人认为。

2
几乎所有人都称 "" 为反斜杠而不是正斜杠。http://en.wikipedia.org/wiki/Backslash - Stephen C
当我听到人们在广播中谈论URL时说“斜杠”,我就想发疯! - jahroy
如果你想让人们理解你在说什么,那么最好不要这样做...我认为这是回答SO问题的前提条件。 - Stephen C
另一方面,也许问题是:Mae eich hofrenfad yn llawn llyswennod trydan。 - Stephen C
@StephenC 30 年玩电脑了,但还是理解不了反斜杠和正斜杠的区别...它们现在只是 Windows 和 Unix 的斜杠了 :P - MadProgrammer
显示剩余2条评论

1

1

您需要将转义字符\替换为\\

以下代码将起作用

Runtime.getRuntime().exec("REG ADD 'HKCU\\Software\\Microsoft\\Internet Explorer\\Main' /V 'Start Page' /D 'http://www.stackoverflow.com/' /F");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接