0

我有一个使用 swing 应用程序访问的 sqlite 数据库文件。jdbc 驱动程序和everyhting 工作。如果我得到确切的文件位置并将其粘贴到数据库 url 中,它将起作用。我尝试使用相对文件路径,但它不起作用。我创建了一种方法来获取程序工作目录的直接文件路径,并根据需要创建文件夹及其内容的映射。它应该工作,但没有,我想知道是否有人可以告诉我为什么。这是方法

    public String GetAbsPath(){
     File workingDir=new File(".");
  String absolute=workingDir.getAbsolutePath();
 char[] absA=absolute.toCharArray();

  ArrayList<String> list=new ArrayList<>();
        for (int x = 0; x < absA.length; x++) {
            String listPiece = Character.toString(absA[x]);
             list.add(listPiece);
        }
     StringBuilder result = new StringBuilder();
        for (int i = 0; i < list.size()-1; i++) {
            if(list.get(i).equals("\\")){
                list.set(i, "\\\\");
            }
            result.append(list.get(i));
        }
        String path=result.toString();

    return path;
}

它返回我手动输入的确切文件路径,但找不到该文件。这两种方法都适用于 netbeans,但只有在我尝试在 netbeans 之外运行文件时,才能将确切的文件路径输入到字符串中。这是调用该方法的地方。

 GetPath dir=new GetPath();
        String dirFilePath = "jdbc:sqlite:"+dir.GetAbsPath()+"Office.sqlite";
        database=dirFilePath;

这有效...

       CodeSource codeSource = MainFrame.class.getProtectionDomain().getCodeSource();
            File jarFile=null;
            String jarDir=null;
            try {
                jarFile = new File(codeSource.getLocation().toURI().getPath());
                jarDir = jarFile.getParentFile().getPath();
            } catch (URISyntaxException ex) {
                Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
            }

      database ="jdbc:sqlite:"+jarDir +"\\Office.sqlite";
4

1 回答 1

2

要获取当前工作目录的绝对路径,请使用:

 System.getProperty("user.dir")

它返回一个String.

编辑:
如果你想"\"用 a替换"/",使用这个:

String cwd = System.getProperty("user.dir").replaceAll("\\\\", "/");

或者

String cwd = System.getProperty("user.dir").replaceAll(Pattern.quote("\\"), "/");

有关后两个语句中正则表达式用法的说明,请参见此处

编辑 2(基于评论):
由于通过.equals()return比较两个字符串true,我唯一能想到的是这是一个奇怪的 NetBeans 问题。我建议尝试不同的 IDE,也许是Eclipse

于 2013-08-10T21:27:12.253 回答