A. 如何读取.dbf文件
对于dbf是什么文件,我想一些朋友都不太注意,因为接触的很少,除非是一些整天编程的朋友,或者是一些专 门 研究相关文件的朋友才会有所关注。简单地讲DBF就是一个格式,这个格式是存储数据用的,因此dbf文件也叫做数据库格式文件。
一、 dbf格式的来源
到底哪些软件会应用到这样的格式呢?像Foxbase,Dbase,Visual FoxPro等这些数据库的处理系统都会需要这种格式的文件。也可以这么说,DBF格式的数据库类型是我们经常会用到的一种桌面型的数据库模式。它是一种结构化的标准格式,主要适用于数据存取的功能,在商业里面应用的比较多一些。
dbf是什么文件?它对于各个企业的关系是怎样的呢?其实这种格式文件是数据交换工具,被广泛的在各企业以及各个事业单位里面使用。
二、dbf文件的读取
那么我们如何读取这样的文件呢?DBFViewerPlus1.67,DBF表查看器,这个软件可以很好的很方便的查看以及编辑相关的DBF文件。这个软件能够轻而易举的搜索以及筛选数据库里面的字段值。此外除了这一款软件之外,还有DataBaseBrowser数据库浏览器。这个软件也是可以查询数据库资料的一种工具类的软件。它既可以让我们看到数据库的结构,也可以让我们查看到相关的数据。此外一些数据库信息,表索引也可以查看得到。
打开这类dbf文件我们也可以用excel打开,ACCESS也能够打开这类数据库文件。
B. java如何输入输出DBF格式文件
我建议用Microsoft Access建库,导入数据为表,修改库结构(字段)属性,再导出DBF文件!另外还有一个比较好的的方法: 打开 FOXPRO,选择开始菜单中的导入,就可以了,数据库结构不用修改
C. java如何操作DBF文件
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", "attachment; filename=" + 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来发送流和读取流。以及把文件转换成流或把流转换成文件的操作。
D. java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
只能是驱动有问题 ,可能是驱动不兼容,
E. java连接dbf,执行sql语句的时候提示找不到文件,请看
通过看你写的代码中发现,驱动已经找到,并且数据也连接正常,请检查表是否存在,你打开数据库看下,是不是有这个表。
F. java本身可以读取什么文件
文件流。或者是通过代码编写,可以读取大部分的外部文件。
如果想要读取机器中的东西,需要做详细的code才行。
G. java读取dbf文件时,程序跑到dbfreader.nextRecord();时报错com.linuxense.javadbf.DBFException: Failed
应该是 字符串解析成数值型出错吧。 你可以看看dbf文件里的内容是否有问题。
H. java解析dbf格式时里面数据类型怎么判断
使用JDBC-ODBC桥接方式读取Access文件,使用Acces
与DBF都需要配置桥接模式,在控制面板里,选择管理工具里配置
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加载驱动
try{
//conn=DriverManager.getConnection(DB_URL);
conn=DriverManager.getConnection("jdbc:odbc:ss","test.dbf","");//无密码则空字符串
pstm=conn.prepareStatement("select*fromtest");//此处的XXB为DBF数据文件的名字
rs=pstm.executeQuery();
至此,完美解决DBF数据库文件读取。网上的东西,太杂了,所以,我们要理智判断,取其精华,去其糟粕,为我所用。
终于被我找到了!
完全free的: com/ 这个网站主要是做数据库连接中间介的,其中用到了一个他们自己开发的叫做JDBF的项目,该项目就是专门控制dbf文件的,整个包只有30K大小,你们随便用个工具反编译一下就可以看懂里面的代码,很简单,就是按照具体格式处理文件!(注意,不是使用JDBC连接的。)
不过我试了一下,发现只支持三中格式的:foxpro2.x、DBase IV、DBase III。
大家用得着的话可以去那里下载! 有问题的话可以再来问我。
我发现国外的这类开源网站很多,国内的就少得可怜了!唉!
I. 如何用java操作.dbf数据库
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 = 0; i < fieldsCount; i++) {
DBFField field = reader.getField(i);
System.out.print(field.getName());
}
Object[] rowValues;
// 一条条取出path文件中记录 rowValues.length;
while ((rowValues = reader.nextRecord()) != null) {
for (int i = 0; i < rowValues.length; i++) {
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");
}
}