如何用java操作.dbf数据库

Python015

如何用java操作.dbf数据库,第1张

1.引入javadbf.4.1.jar

2.

import com.linuxense.javadbf.DBFField

import com.linuxense.javadbf.DBFReader

3.实例

package com.realhope.jdbf

import java.io.FileInputStream

import java.io.InputStream

import com.linuxense.javadbf.DBFField

import com.linuxense.javadbf.DBFReader

public class readDBF {

public static void readDBF(String path) {

InputStream fis = null

try {

// 读取文件的输入流

fis = new FileInputStream(path)

// 根据输入流初始化一个DBFReader实例,用来读取DBF文件信息

DBFReader reader = new DBFReader(fis)

// 调用DBFReader对实例方法得到path文件中字段的个数

int fieldsCount = reader.getFieldCount()

// 取出字段信息

for (int i = 0i <fieldsCounti++) {

DBFField field = reader.getField(i)

System.out.print(field.getName())

}

Object[] rowValues

// 一条条取出path文件中记录rowValues.length

while ((rowValues = reader.nextRecord()) != null) {

for (int i = 0i <rowValues.lengthi++) {

System.out.println(rowValues[i])

}

}

} catch (Exception e) {

e.printStackTrace()

} finally {

try {

fis.close()

} catch (Exception e) {

}

}

}

public static void main(String[] args) {

readDBF.readDBF("Y:/dbf/01-04-2013/sjshq.DBF")

}

}

 Java读取DBF文件,需要加载开源jar包JavaDBF.jar,然后使用里面的方法进行读写,示例如下:

package search

public class ReadDBF {

public static void main(String args[])

   

    {

readDBF()

    }

private static void readDBF()

{

     try

     {

      System.out.println("正在读取文件!")

   

      DBFReader dbfreader = new DBFReader("D:\\ZG2011格式.dbf")

      for(int b = 0b<dbfreader.getFieldCount()b++)

      {

       if(b>0)

       { System.out.print(",")}

       System.out.print(dbfreader.getField(b).getName().trim().toUpperCase())

      

       if(b == (dbfreader.getFieldCount()-1))

        System.out.print("\n")

      } 

      for(int i = 0dbfreader.hasNextRecord()i++)

      {

       String[] aobj = dbfreader.nextRecordString()

       for(int b = 0b<dbfreader.getFieldCount()b++)

       {

        if(b>0)

         System.out.print(",")

        System.out.print(aobj[b].trim())

     

        if(b == (dbfreader.getFieldCount()-1))

         System.out.print("\n")

     

       } 

      }

      System.out.println("读取文件成功!")

     }

     catch(Exception e)

     {

      System.out.print(e.getMessage())

     }

}

}

ml页面的一个链接中。这样做的缺点是把文件在服务器上的路径暴露了,并且还无法对文件下载进行其它的控制(如权限)。这个就不写示例了。

2.在服务器端把文件转换成输出流,写入到response,以response把文件带到浏览器,由浏览器来提示用户是否愿意保存文件到本地。(示例如下)

<%

response.setContentType(fileminitype)

response.setHeader("Location",filename)

response.setHeader("Cache-Control", "max-age=" + cacheTime)

//filename应该是编码后的(utf-8)

response.setHeader("Content-Disposition", "attachmentfilename=" + filename)

response.setContentLength(filelength)

OutputStream outputStream = response.getOutputStream()

InputStream inputStream = new FileInputStream(filepath)

byte[] buffer = new byte[1024]

int i = -1

while ((i = inputStream.read(buffer)) != -1) {

outputStream.write(buffer, 0, i)

}

outputStream.flush()

outputStream.close()

inputStream.close()

outputStream = null

%>

3.既然是JSP的话,还有一种方式就是用Applet来实现文件的下载。不过客户首先得信任你的这个Applet小程序,由这个程序来接受由servlet发送来的数据流,并写入到本地。

servlet端示例

public void service(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

res.setContentType(" text/plain ")

OutputStream outputStream = null

try {

outputStream = res.getOutputStream()

//把文件路径为srcFile的文件写入outputStream中

popFile(srcFile, outputStream))

} catch (IOException e) {

e.printStackTrace()

}

}

JApplet端示例

URLConnection con

try {

//url是被调用的SERVLET的网址 如 *.do

con = url.openConnection()

con.setUseCaches(false)

con.setDoInput(true)

con.setDoOutput(true)

con.setRequestProperty("Content-Type",

"application/octet-stream")

InputStream in = con.getInputStream()

ProgressMonitorInputStream pmInputStream = new ProgressMonitorInputStream

(pane, "正在从服务器下载文件内容", in)

ProgressMonitor pMonitor = pmInputStream.getProgressMonitor()

pMonitor.setMillisToDecideToPopup(3)

pMonitor.setMillisToPopup(3)

//localfilepath本地路径,localstr文件文件夹,filename本地文件名

String localfilepath = localstr + filename

//方法saveFilsaveFilee是把输入流pmInputStream写到文件localfilepath中

if(saveFilsaveFilee(localfilepath,pmInputStream)){

openLocalFile(localfilepath)

}

4.顺便把JApplet上传文件的代码也贴上来.

JApplet端示例

URLConnection con

try {

con = url.openConnection()

//url是被调用的SERVLET的网址 如 *.do

con.setUseCaches(false)

con.setDoInput(true)

con.setDoOutput(true)

con.setRequestProperty("Content-Type","application/octet-stream")

OutputStream out = con.getOutputStream()

//localfilepath本地路径,localstr文件文件夹,filename本地文件名

String localfilepath = localstr + filename

//文件getOutputStream是把文件localfilepath写到输出流out中

getOutputStream(localfilepath,out)

InputStream in = con.getInputStream()

return true

}catch (IOException e) {

System.out.println("文件上传出错!")

e.printStackTrace()

}

servlet端代码示例

public void service(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

res.setContentType(" text/plain ")

InputStream inputStream = null

try {

inputStream = res.getInputStream()

//把输入流inputStream保存到文件路径为srcFile的文件中

writefile(srcFile, inputStream)

} catch (IOException e) {

e.printStackTrace()

}

} // end service

总结:在文件的传输中是流的形式存在的,在硬盘上是文件的形式存在的。我们要做的只是通过HttpServletRequest和HttpServletResponse,或者是response和request来发送流和读取流。以及把文件转换成流或把流转换成文件的操作。