如何把PDA中的文本文档导出到电脑PC中呢?而且是基于JAVA平台的,网上的例子和能够参考的资料,几乎为零
但是在高手的指点下,这个难题也被额给攻破了喽……^^
进入正题,PDA我在这里就不做太多的说明了,简单的说,就是一个掌上电脑,和一般的电脑相比,就是小点,我现在用的这个
操作系统是windows mobile,如果还想了解PDA,请自己找“百”老师(www.baidu.com)
先看下效果图吧!!
当点击上面的这个按钮时,执行的操作就是从PDA中读取相应位置上的文本文档,并把文本文档copy到电脑上
前提先说明一下,由于本人技术上不到火候,说的可能有漏洞,请大虾们不要建议啊^^
废话不多说,看前台代码吧!
当点击按钮时,首先执行的是fromPDA()这个方法
function fromPDA(){ //点击按钮时执行方法
bar.FileUse("c://filelist.txt","c://S_1_D_send.txt|//My Documents//send//S_1_D_send.txt|0|","utf-8","^");
Run('file:///C:/Program%20Files/hubeiyidong/copytopc.exe');
fileImport();
}
function fileImport(){
var id = setTimeout("fileImport();",500);
var fso=new ActiveXObject("Scripting.FileSystemObject");
if(fso.fileExists("c://S_1_D_send.txt")){
clearTimeout(id);
readdata();
}
}
function readdata(){ //调用导入方法
var success_num;
var fail_num;
var fail_card_no;
var error;
var assets=bar.TEST_file("c://S_1_D_send.txt"); //读取指定文本文档
var url = '<%=path%>/rb-assetManageServices.do';
jQuery.ajax({ //利用jQuery的ajax向后台发送请求
type: "POST",
url: url,
data: encodeURI(encodeURI('method=getInfoFromPDA()&assets=' + assets)),
success: function(data){
alert("哥成功啦!");
}
});
if("0"!=assets){ //如果当时指定的文本文档存在,进行备份
var fso,f1;
fso=new ActiveXObject("Scripting.FileSystemObject");
if(!fso.FolderExists("C://bak")){
fso.CreateFolder ("C://bak");
}
f1 = fso.GetFile( "c://S_1_D_send.txt");
f1.Copy("c://bak//S_1_D_send.txt");
f1.Delete();
}
}
function Run(strPath){ //把PDA中文本copy到电脑PC中
try {
var objShell=new ActiveXObject("wscript.shell");
objShell.Run(strPath);
objShell=null;
}catch(e){
alert(e) ;
}
}
解释:
第一个方法fromPDA()中各项参数说明
//第一个参数是写文本文件的路径 第二个参数是写文本文件的内容。
//第三个参数是文本文档中的编码格式 第四个参数是在PDA中文档内容的分隔符
//竖线分割后第一个是电脑上文件的位置 ,第二个是PDA文件上的位置。
//1 和 0 是 接收成功以后删除不删除 PDA里的文件。具体是1是删除 0是不删除
第二个方法fileImport()首先判断指定的文件是否存在,如果存在再进行读取操作
第三个方法readdata()就是读取本地电脑PC上的指定文件
在这过程中会出现的错误!!!!
1、IE还会报"bar"未定义 ?
这个,当然了,你看,在上面的文档中哪里有对bar的定义呢???你找到了吗?反正我是没找见……嘿嘿
当然,这个需要在服务器端jsp页面中添加相应的控件啦,
<OBJECT
classid="clsid:9DD2E7D1-599A-47D5-AB22-4B47A71EA34B"
codebase="http://localhost:8080/eamstatic/ems/utils/eactocx/PRINTDLLtest.inf#version=1,0,42,0"
id=bar
width=0
height=0
align=center
hspace=0
vspace=0
>
仔细看这个id= bar,这里定义了上面方法中的变量bar
还需要注意的是,这里的codebase的值,这里我用的是自己的电脑进行开发的,所以写成了localhost:8080,根据自己的需求进行修改
还有这个eamstatic/ems/utils/eactocx/PRINTDLLtest.inf
这是个什么东东啊?说实话,我也不知道,^^ 这是高手封装好的一个文件,直接拿来用就OK了,
eamstatic/ems/utils/eactocx 指的是这个PRINTDLLtest.inf的路径,根据需求进行修改……
这个文件在我的资源中可以进行下载……
2、IE还会报"缺少对象,Automaction不能创建对象"?这呀呀的,IE怎么老报错!!!
这个是因为你调用new ActiveXObject("Scripting.FileSystemObject")时没有进行scrrun.dll文件的注册
进行注册吧!!!
cmd ----regsvr32 scrrun.dll
OK,搞定……
3、什么,IE还报"找不到指定程序"?
当然了,你没有安装所需要的EXE文件,它当然会报错啦!!!
这个copytopc.exe 在我的资源里可以下载……
4、还报!IE报"加载动态库失败"?
嗯,这个问题比较的严重了……
看看吧!需要用到一个wshom.ocx的控件,如果你系统里没有,从我的资源里可以进行下载……
另外,可能你的系统不是很完整,和我的一样,少了很多的动态链接库文件,导致错误不能解决,
这个问题好解决,我资源里有一个EXE文件,可以专门来查询一个控件所需要的dll文件……
5、还报啊?IE报“对象不支持此属性或方法”?
嗯,这个是因为浏览器没有找到你系统中的PRINTDLLtest.inf文件,
<1> 这个文件的路径没有写对
<2> 路径写对了,但没有把服务器端加入到可信站点中
如何按照常理来说,当客户端第一次浏览这个“导出PDA数据”时,会自动弹出一个页面,提示加载inf文件
但是有些情况是一直弹不出这个窗口,我就遇到了这个情况,呀呀的,后来请高手帮忙,写了一个bat批处理文件,搞定
这个批处理文件在我的资源 里可以下载……
6、还报"Object error"错误?
这个是因为你在页面中没有加入<OBJECT>控件或者是inf文件路径没有写对的原因……
最后,嘿嘿,问题都解决了,导出吧……
祝你早是解决难题^^