Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jackcess和JCIFS操作SMB共享上的Access数据库_Java_Macos_Smb_Jackcess - Fatal编程技术网

Java 使用Jackcess和JCIFS操作SMB共享上的Access数据库

Java 使用Jackcess和JCIFS操作SMB共享上的Access数据库,java,macos,smb,jackcess,Java,Macos,Smb,Jackcess,我需要使用Jackcess在Java中处理MS-Access文件。该文件位于SMB共享上,因此我假设必须使用JCIFS 我试过这个 String testdirectory = "smb://" + "file location"; SmbFile testsmbdir = null; try{ testsmbdir = new SmbFile(testdirectory,auth); }catch(Exception e){

我需要使用Jackcess在Java中处理MS-Access文件。该文件位于SMB共享上,因此我假设必须使用JCIFS

我试过这个

    String testdirectory = "smb://" + "file location"; 

    SmbFile testsmbdir = null;

    try{
            testsmbdir = new SmbFile(testdirectory,auth);
    }catch(Exception e){
                e.printStackTrace();
    }


    SmbFileInputStream smbFilestream = new SmbFileInputStream(testsmbdir);
    db = DatabaseBuilder.open(testsmbdir);
但是,它说SMBFile不能转换为

db = DatabaseBuilder.open(testsmbdir)" 
线路。另外,如果我尝试改用“smbFilestream”,它会说它也无法将SmbFileInputStream转换为文件

我是否必须将文件复制到本地机器或完全不同的东西?如果我可以这样做


(顺便说一句,我是一名windows用户。我正在将我的应用程序转换为Mac,如果我的行话关闭了,很抱歉。)

在回复Jackcess论坛上的一条帖子时,James建议

实现与SMB文件一起工作的FileChannel版本应该相对简单

我刚刚在Eclipse中的一个名为
smb4jackcess
的Maven项目中尝试了它,我在不需要编写太多代码的情况下就实现了它。我创建的类名为
SmbFileChannel

//使用jcifs.smb.SmbRandomAccessFile的FileChannel
包smb4jackcess;
导入java.io.IOException;
导入java.net.MalformedURLException;
导入java.net.UnknownHostException;
导入java.nio.ByteBuffer;
导入java.nio.MappedByteBuffer;
导入java.nio.channels.FileChannel;
导入java.nio.channels.FileLock;
导入java.nio.channels.ReadableByteChannel;
导入java.nio.channels.WritableByteChannel;
导入jcifs.smb.SmbException;
导入jcifs.smb.smb文件;
导入jcifs.smb.smbdrandomAccessFile;
公共类SmbFileChannel扩展了FileChannel{
私有最终访问文件\u文件;
私人长裤;
公共SmbFileChannel(字符串smbURL)引发SmbException、MalformedURLException、UnknownHostException{
_file=新的SmbRandomAccessFile(smbURL,“rw”,SmbFile.file\u NO\u共享);
_长度=_file.length();
}
@凌驾
public void force(布尔元数据)引发SmbException、MalformedURLException、UnknownHostException{
//无所事事
}
@凌驾
公共文件锁(长位置、长大小、布尔共享){
抛出新的UnsupportedOperationException();
}
@凌驾
公共地图PedBytebuffer地图(地图模式、长位置、长尺寸){
抛出新的UnsupportedOperationException();
}
@凌驾
public long position()引发SMB异常{
返回_file.getFilePointer();
}
@凌驾
公共文件通道位置(long newPosition)引发SMB异常{
_file.seek(newPosition);
归还这个;
}
@凌驾
公共整数读取(ByteBuffer dst){
抛出新的UnsupportedOperationException();
}
@凌驾
公共整数读取(ByteBuffer dst,长位置)引发SMB异常{
字节[]b=新字节[dst.remaining()];
_文件查找(位置);
int bytesRead=_file.read(b);
dst.put(b);
返回字节读取;
}
@凌驾
公共长读(字节缓冲[]dsts,整数偏移量,整数长度){
抛出新的UnsupportedOperationException();
}
@凌驾
public long size()引发SMB异常{
返回长度;
}
@凌驾
public long transferFrom(ReadableByteChannel src、long position、long count)抛出IOException{
ByteBuffer bb=ByteBuffer.allocate((int)计数);
int bytesWrited=src.read(bb);
bb.倒带();
bb.限制(字节);
这个。写(bb,位置);
返回已写入的字节;
}
@凌驾
公共长转移到(长位置、长计数、可由Techannel目标写入){
抛出新的UnsupportedOperationException();
}
@凌驾
公共文件通道截断(长新闻大小)引发SMB异常{
如果(新闻大小<0L){
抛出新的IllegalArgumentException(“负大小”);
}
_file.setLength(newSize);
_长度=新闻大小;
归还这个;
}
@凌驾
public FileLock tryLock(长位置、长大小、布尔共享){
抛出新的UnsupportedOperationException();
}
@凌驾
public int write(ByteBuffer src)引发SMB异常{
抛出新的UnsupportedOperationException();
}
@凌驾
public int write(ByteBuffer src,long position)引发SMB异常{
字节[]b=新字节[src.remaining()];
src.get(b);
_文件查找(位置);
_文件。写入(b);
long-endPos=位置+b.长度;
如果(结束位置>长度){
_长度=末端位置;
}
返回b.length;
}
@凌驾
公共长写(ByteBuffer[]srcs,int偏移量,int长度){
抛出新的UnsupportedOperationException();
}
@凌驾
受保护的void implCloseChannel()引发SMB异常{
_file.close();
}
}
我使用的主要课程是

包smb4jackcess;
导入java.nio.channels.FileChannel;
导入com.healthmarketscience.jackcess.Column;
导入com.healthmarketscience.jackcess.ColumnBuilder;
导入com.healthmarketscience.jackcess.DataType;
导入com.healthmarketscience.jackcess.Database;
导入com.healthmarketscience.jackcess.Database.FileFormat;
导入com.healthmarketscience.jackcess.DatabaseBuilder;
导入com.healthmarketscience.jackcess.IndexBuilder;
导入com.healthmarketscience.jackcess.Table;
导入com.healthmarketscience.jackcess.TableBuilder;
公共类Smb4jackcessMain{
公共静态void main(字符串[]args){
字符串smbURL=”smb://gord:mypassword@SERVERNAME/sharename/etc/newdb.accdb”;
try(SmbFileChannel sfc=新的SmbFileChannel(smbURL)){
//创建一个全新的数据库文件
Database db=新的DatabaseBuilder()
.setChannel(证监会)
.setFileFormat(FileFormat.V2010)
.create();
//向其中添加一个表
表格newTable=新表格生成器(“newTable”)
.addColumn(新建ColumnBuilde)