课程咨询 :0592-5903858 QQ:1079585464

厦门达内java培训

厦门Java培训 > 达内新闻 > java把dbf文件写入远程服务器的步骤
  • java把dbf文件写入远程服务器的步骤

    发布:厦门达内      来源:达内培训      时间:2015-11-19


  •     达内java培训专家表示,把dbf写入到远程服务器上,需要封装好的jar包。

        首先,Java读写Windows共享文件夹:

        1、下载JCIFS

        把jcifs-1.3.18.jar加入到项目jar包库中。

        2、设置共享文件夹,需要设置用户名密码

        3、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);
            }

        }

        然后,“smbFile.connect(); //尝试连接”这段代码过于花费时间,行情的dbf库实时刷新,怎样才能更好呢?

        1、项目启动时初始化好远程连接

        写一个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);

        2、模块化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();
                }           

    3、行情来时,写进去

            dbfListener.writeDBF(dbfQuotations);
            logger.info("写入DBF数据库结束");


       
    推荐文章

上一篇:java实现单例方法的对比

下一篇:Java 多线程处理任务的封装处理

最新开班日期  |  更多

Java--大数据周末班

Java--大数据周末班

开班日期:每周一

Java--大数据全日制班

Java--大数据全日制班

开班日期:每周一

Java--零基础周末班

Java--零基础周末班

开班日期:每周一

Java--零基础全日制班

Java--零基础全日制班

开班日期:每周一

  • 地址:厦门软件园二期望海路59号之一401达内科技
  • 课程培训电话:0592-5903858 QQ:1079585464     全国服务监督电话:400-111-8989
  • 服务邮箱 tousu@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56