如何使用java和jackcess从linux机器访问共享文件夹中的远程.mdb文件

时间:2013-11-08 06:10:05

标签: java linux

这是我的第一篇文章。我试图使用jackcess lib打开远程.mdb文件,该文件位于Windows机器的共享文件夹中。并在busineess对象中设置表值。我写了下面的代码。

场景1:我从windows机器运行代码它工作正常。场景2:如果我从linux机器运行代码,它将获得文件未找到异常。希望它应该是小错误。请纠正我在这里缺少的东西。

package com.gg.main;   

import java.io.File;   
import java.io.IOException;   
import java.util.ArrayList;   
import java.util.Map;   
import com.healthmarketscience.jackcess.Database;   
import com.healthmarketscience.jackcess.Table;   
import com.penske.model.Login;   


public class Test {   

public static void main(String args[]){       
    Table table = null;   
    Database db = null;   
    Login login = null;   
    ArrayList<Login> rowList = null;   
    try {   
    rowList = new ArrayList();   
    db = Database.open(new File("//aa.bb.com/file/access.mdb"));   

    table = db.getTable("Maintenance");   
    System.out.println(Database.open(new File("//aa.bb.com/file/access.mdb"))   
               .getTable("Maintenance").getColumns());   
    for(Map<String, Object> row : table) {   
        login = new Login();   
        if(row.get("Req_ID")!=null){   
        login.setId(row.get("Req_ID").toString());   
        }   
        if(row.get("Name")!=null){   
        login.setName(row.get("Name").toString());   
        }if(row.get("Loc")!=null){   
        login.setLoc(row.get("Loc").toString());   
        }   
        rowList.add(login);                
    }   

    login.setRowList(rowList);   
    } catch (IOException e1) {   
    e1.printStackTrace();   
    }   
}   

}

1 个答案:

答案 0 :(得分:0)

Linux没有对Windows的UNC路径的本机支持,因为您在此处使用它们:

new File("//aa.bb.com/file/access.mdb")

您必须在Linux文件系统中的某个位置安装远程文件系统,程序可以在其中访问它,然后使用smbfs或类似的东西替换程序中的路径以使用该本地文件系统路径。自从我不得不与Windows机器进行交互以来已经有很长一段时间了,但它应该是这样的:

mount -t smbfs -o username=foo,password=bar //aa.bb.com/file /mnt/whatever_you_choose_to_name_it

有关详细信息,请参阅the manpage for smbmount

当然,如果您的程序应该自动启动,例如。作为系统启动的一部分,您必须确保文件系统也自动挂载。请参阅fstab(5)