我有一个sqlite数据库文件,我使用swing应用程序访问。 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";
答案 0 :(得分:2)
要获取当前工作目录的绝对路径,请使用:
System.getProperty("user.dir")
返回String
。
修改强>
如果您想将"\"
替换为"/"
,请使用以下命令:
String cwd = System.getProperty("user.dir").replaceAll("\\\\", "/");
或强>
String cwd = System.getProperty("user.dir").replaceAll(Pattern.quote("\\"), "/");
有关后两种语句中正则表达式用法的解释,请参阅here。
编辑2(基于评论):
由于通过.equals()
比较两个字符串返回true
,我唯一能想到的是这是一个奇怪的NetBeans问题。我建议尝试使用其他IDE,也许Eclipse。