我的程序需要用EXCEL打开一个文件,用Runtime.getRuntime().exec来打开,
目前我机子上的EXCEL.EXE位置为:
C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE
代码为:
String addr="C:\\Downloads\\TEST.xls";
Runtime.getRuntime().exec("C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE " +addr);
可以正常打开,问题是程序布置到客户端时,无法确认用户机子上的
EXCEL.EXE是在哪个路径下,这怎么办呢?我试过直接
Runtime.getRuntime().exec("EXCEL.EXE " +addr);这样是无法打开的.
如何取得机子上EXCEL.EXE的路径呢?
望赐教,最好是写个简单的例子,谢谢.
目前我机子上的EXCEL.EXE位置为:
C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE
代码为:
String addr="C:\\Downloads\\TEST.xls";
Runtime.getRuntime().exec("C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE " +addr);
可以正常打开,问题是程序布置到客户端时,无法确认用户机子上的
EXCEL.EXE是在哪个路径下,这怎么办呢?我试过直接
Runtime.getRuntime().exec("EXCEL.EXE " +addr);这样是无法打开的.
如何取得机子上EXCEL.EXE的路径呢?
望赐教,最好是写个简单的例子,谢谢.
你可以加段代码在客户端让客户来选择好了。非要这么不可的话,我有段C++代码,你可以参考一下。作些改进。
void TForm1::FindFile(AnsiString Dir) // Dir 是路径 如"c:\\" 或 "D:\\"
{
TSearchRec sr;
int iAttributes = 0;
iAttributes |= faAnyFile;
if ( FindFirst( Dir+"*.*", iAttributes, sr) == 0 )
{
try
{ AnsiString dirStr,fileName;
do
{
if ( sr.Name == "." || sr.Name == ".." )
continue;
if ( sr.Attr == faDirectory )
{
FindFile (Dir+sr.Name+"\\");//找到一个目录
}
else
{
Application->ProcessMessages();
fileName=sr.Name;
dirStr=Dir;
if (fileName.Pos("mang3160.pbd")>0)
{
mydir= Dir;
}
}
Application->ProcessMessages();
}while ( FindNext (sr) == 0);
Application->ProcessMessages();
FindClose(sr);
}
catch(Exception &e)
{
FindClose(sr);
}
}
}
package org.solol.test;import com.ice.jni.registry.NoSuchKeyException;
import com.ice.jni.registry.RegStringValue;
import com.ice.jni.registry.Registry;
import com.ice.jni.registry.RegistryException;
import com.ice.jni.registry.RegistryKey;/**
* @author solo L
*
*/
public class JNIRegistryTest { /**
* @param args
*/
public static void main(String[] args) {
//创建注册表项并设置相应的值
try {
RegistryKey software = Registry.HKEY_LOCAL_MACHINE
.openSubKey("SOFTWARE"); RegistryKey subKey = software.createSubKey("SubKeyName", ""); subKey.setValue(new RegStringValue(subKey, "subKey1",
"subKey1Value"));
subKey.setValue(new RegStringValue(subKey, "subKey2",
"subKey2Value"));
subKey.closeKey();
} catch (NoSuchKeyException e) {
e.printStackTrace();
} catch (RegistryException e) {
e.printStackTrace();
}
//打开注册表项并读出相应的值
try {
RegistryKey software = Registry.HKEY_LOCAL_MACHINE.
openSubKey("SOFTWARE");
RegistryKey subKey = software.openSubKey("SubKeyName");
String subKey1Value = subKey.getStringValue("subKey1");
String subKey2Value = subKey.getStringValue("subKey2");
System.out.println(subKey1Value);
System.out.println(subKey2Value);
subKey.closeKey();
} catch (NoSuchKeyException e) {
e.printStackTrace();
} catch (RegistryException e) {
e.printStackTrace();
}
}
}
TO sureyor()
import com.ice.jni.registry.NoSuchKeyException;
import com.ice.jni.registry.RegStringValue;
import com.ice.jni.registry.Registry;
import com.ice.jni.registry.RegistryException;
import com.ice.jni.registry.RegistryKey;
是要下什么包吗?还有是不是把你程序中的 RegistryKey subKey = software.openSubKey("SubKeyName");换成software.openSubKey("EXCEL.EXE");然后String subKey1Value = subKey.getStringValue("subKey1");
String subKey2Value = subKey.getStringValue("subKey2");这两个相加就是具体的路径吗?
import com.ice.jni.registry.RegStringValue;
import com.ice.jni.registry.Registry;
import com.ice.jni.registry.RegistryException;
import com.ice.jni.registry.RegistryKey;api中没有找到这些类。。
Runtime.getRuntime().exec("cmd /c start \"" +addr + "\"");在cmd下用start就可以了啊,當然跟操作系統有關,windows98應該是command,linux\unix下要查察...
怎嚜感覺這麼麻煩,直接這樣就可以了啊:String addr="C:\\Downloads\\TEST.xls";
Runtime.getRuntime().exec("cmd /c start \"" +addr + "\"");在cmd下用start就可以了啊,當然跟操作系統有關,windows98應該是command,linux\unix下要查察...
=========================
根本不行,运行结果只是跳出了CMD窗口,标题为C:\Downloads\TEST.xls,而没有打开文件,光标停在当前程序包所在的路径下,即C:\openxls\AmTest> 我试过了只有继续手动输入C:\Downloads\TEST.xls,然后回车才能打开这个文件。为什么会这样?是不是有什么地方写的不对,我的系统为XP。
Runtime.getRuntime().exec("cmd /c start "+addr);
正解OK了,结帐,谢谢。
String addr = "C:\\Downloads\\TEST.xls";
Runtime.getRuntime().exec("cmd /c start "+addr);
----------------------------------------------
路径中有空格就不行了的。。比如C:\documents and setting\a.xls
可以试试看。