Java dbf文件写入远程服务器
来源:互联网 发布:怪物猎人p3数据 编辑:程序博客网 时间:2024/05/19 23:53
重要的事情说三遍,有木有,Java dbf文件写入远程服务器,第一遍,第二遍,第三遍…够了,王二,还有完没有,赶紧点
需求
今天早晨,王二(也就是我)接到一个需求:
把行情的dbf库写入到远程windows server2003上!
分析
之前,我就写过一篇Java操作DBF文件数据库 ,但怎么把dbf写入到远程服务器上,这好像需要点什么。
于是我就去问度娘啊,看看有没有什么封装好的jar包之类的,好拿来用用。
折腾了一会关键字,终于找到了一篇Java读写Windows共享文件夹,感谢博主的良苦用心啊,于是为博主点了一个赞。
拿来主义
第一步,下载JCIFS
网址: http://jcifs.samba.org/
把jcifs-1.3.18.jar加入到项目jar包库中。
第二步,设置共享文件夹,当然需要设置用户名密码的
怎样让客户机访问windows2003服务器共享文件
第三步,demo,先探探路通不通
public static void main(String[] args) { try { // 定义DBFWriter实例用来写DBF文件 DBFWriter writer = new DBFWriter(); writer.setCharactersetName("GB2312"); DBFField fields[] = new DBFField[1]; // S1 HQZQDM 证券代码 Char 6 fields[0] = new DBFField(); fields[0].setName("S1"); fields[0].setDataType(DBFField.FIELD_TYPE_C); fields[0].setFieldLength(6); writer.setFields(fields); Object[] obj1 = new Object[1]; obj1[0] = "000001"; writer.addRecord(obj1); String remoteUrl = "smb://abc:123@127.168.1.11/dbf/PENGBO.dbf"; SmbFile smbFile = new SmbFile(remoteUrl); smbFile.connect(); //尝试连接 OutputStream fos = new BufferedOutputStream(smbFile.getOutputStream()); writer.write(fos); fos.close(); } catch (Exception e) { logger.error(e.getMessage()); logger.error(e.getMessage(), e); } }
注意remoteUrl
smb:,不知道啥意思,应该是一种协议吧?王二,你这么一知半解,不好吧?额,那问问度娘吧
SMB(Server Message Block)是协议名,它能被用于Wap连接和客户端与服务器之间的信息沟通。
abc:123,你共享权限中指定的用户名和密码
- 127.168.1.11,自然是远程ip了
- dbf,共享的文件夹
- PENGBO.dbf,dbf文件名喽
- 第六,也没啥,如果上面5点没有说清楚,那么请私信王二,或者嘛,问度娘,美貌如花,有问必答????
run一下
写到这应该算完结了吧,我觉得也是,可是王二偏要说再写点,好吧,我就应了自己吧!
修葺
其实吧,写到上面这里,也确实算完了,无奈王二天生一颗追求完美的心,这面这段代码有点小遗憾,smbFile.connect(); //尝试连接
特别花费时间,而行情的dbf库实时刷新,这样肯定不行!
那么需要做的就是,你看下面步骤,我决定放大招:
第一步,项目启动时初始化好远程连接
写一个DBFListener类吧
private static Logger logger = Logger.getLogger(DBFListener.class); private SmbFile smbFile = null; private File file = null; public void start() { try { if (Commonstants.remote_flag_dbf) {//需要远程写dbf String remoteUrl = "smb://" + Commonstants.username_dbf + ":" + Commonstants.password_dbf + "@" + Commonstants.path_info_dbf; smbFile = new SmbFile(remoteUrl); smbFile.connect(); logger.info("dbf 远程连接启动成功!"); } else { file = new File(Commonstants.path_info_dbf); logger.info("dbf 本地文件创建成功!"); } } catch (Exception e) { logger.error(e.getMessage()); logger.error(e.getMessage(), e); } } // 行情变化时,对行情进行写入 public void writeDBF(List<Quotation> dbfQuotations) { ExecutorService pool = Executors.newSingleThreadExecutor(); pool.execute(new Thread(new DBFThread(smbFile, dbfQuotations, file))); pool.shutdown(); logger.info("dbf写入线程启动..."); }
项目运行时,尝试连接远程dbf服务器
logger.info("行情服务器开始连接dbf服务"); int j = 1; DBFListener dbfListener = new DBFListener(); while (true) { try { dbfListener.start(); break; } catch (Exception e) { logger.info("5秒后开始尝试第" + (++j) + "次连接dbf服务,发生重连原因:" + e.getMessage()); try { Thread.sleep(5000); } catch (InterruptedException e1) { logger.error(e1.getMessage(), e1); } } } DBFManager.setdbfListener(dbfListener);
第二步,模块化dbf操作
写一个dbf操作类DBFOperation
public static void writeDBFByQuotation(SmbFile smbFile, List<Quotation> quotaionList, File file) { try { // 定义DBFWriter实例用来写DBF文件 DBFWriter writer = new DBFWriter(); writer.setCharactersetName("GB2312"); DBFField fields[] = new DBFField[30]; // S1 HQZQDM 证券代码 Char 6 fields[0] = new DBFField(); fields[0].setName("S1"); fields[0].setDataType(DBFField.FIELD_TYPE_C); fields[0].setFieldLength(6);... if (file!=null) { FileOutputStream fos = new FileOutputStream(file); writer.write(fos); fos.close(); } if (smbFile != null) { OutputStream fos = new BufferedOutputStream(smbFile.getOutputStream()); writer.write(fos); fos.close(); }
第三步,行情来时,写进去
dbfListener.writeDBF(dbfQuotations); logger.info("写入DBF数据库结束");
这代码没法贴全,只好捡重要的贴出来,权当给一个参考。主要的思路就是,系统初始化就加载好SmbFile对象,然后对dbf写入进行封装,更灵活的应对远程写入还是本地写入,最后呢,行情刷新时能够启动线程写入,而不影响当前线程的性能。王二的编程能力很一般,虽然他老是不承认,没办法,谁让我就是王二呢?!
相关文章
- Java操作DBF文件数据库
王二语录
那么人生何处不爬虫,爬虫请标http://blog.csdn.net/qing_gee
如果你能心无旁骛,专心致志地做好自己的事,做最好的自己,你就能在不知不觉中超越他人,跨越平庸的鸿沟,脱颖而出!—–写™的真好,可惜不是我王二写的!
- Java dbf文件写入远程服务器
- java 读取,写入 dbf
- 【JAVA】读取和写入数据库生成的dbf文件
- java读写dbf文件
- java操作dbf文件
- java 读取dbf文件
- java编辑dbf文件
- Java 读取dbf文件
- DBF文件读取与写入程序设计
- java下载远程服务器文件
- java 读取 dbf数据库的dbf文件代码
- Java解析之纠结的DBF文件
- java 断点续传文件到远程服务器
- java通过http读取远程服务器文件
- JAVA下载远程Linux服务器的文件
- java 实现上传文件到远程服务器
- java 远程 发送文件到服务器
- java上传文件到远程服务器七牛云
- [ubuntu]yocto的安装配置与开发
- Java开发中的23种设计模式详解(转)
- 杭电-4857逃生(反向拓扑+优先队列+逆向输出)
- 贝塞尔曲线
- Spring如何下载
- Java dbf文件写入远程服务器
- iOS开发之 WebView点击图片看大图效果
- 数学知识
- Android获取资源文件的几种方法
- Ubuntu下开启mysql的bin_log日志
- 在RDO自动安装的OpenStack Liberty单机中搭建能够内外网互访的网络(一)-网络规划
- SpringMVC学习系列(3) 之 URL请求到Action的映射规则
- no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
- 【Android】关于Android Studio 开启断言assert