以下代码在记事本中打开状态非常好:
import java.util.*;
class test
{
public static void main(String args[])
{
try{
ProcessBuilder pb=new ProcessBuilder("notepad","F:/status");
pb.start();
}catch(Exception e)
{
System.out.println(e);
}
}
}
以下代码没有播放这首歌:
import java.util.*;
class test
{
public static void main(String args[])
{
try{
ProcessBuilder pb=new ProcessBuilder("C:/Program Files (x86)/VideoLAN/VLC/vlc","D:/02 Tu Jaane Na");
pb.start();
}catch(Exception e)
{
System.out.println(e);
}
}
}
答案 0 :(得分:2)
对于1.6+代码,请改用Desktop.open(File)
。
当然,在致电之前要做的明智之举就是检查File.exists()
。
OTOH,Desktop.open(File)
抛出了一系列方便的例外,包括:
NullPointerException
- 如果文件为空IllegalArgumentException
- 如果指定的文件不存在 UnsupportedOperationException
- 如果当前平台不支持Desktop.Action.OPEN
操作IOException
- 如果指定的文件没有关联的应用程序或关联的应用程序无法启动如果处理得当,该例外将表明当前的问题。
另外,Desktop
类设计为跨平台的,并且将处理为其定义关联的任何文件类型。从这个意义上说,这比使用Process
答案 1 :(得分:2)
我认为问题在于您忽略了您尝试打开的文件filename extensions这一事实。
Windows资源管理器默认情况下不显示文件扩展名 - 这可能是您不知道它们存在的原因。
记事本在您的第一个示例中工作的原因是记事本会自动为其文件名参数添加.txt
扩展名,以防您自己没有提供。实际上,正在打开的文件不是status
而是status.txt
。
VLC没有这种“高级”功能,因为它没有专门设计的文件扩展名。
因此,您需要查找dir
命令输出并将完整文件名添加为参数。
如果这是真正的问题 - 您可能希望修改Windows资源管理器设置以显示文件扩展名:
或者,哪个更好,切换到程序员友好的操作系统:)