直接文件路径不起作用
Posted
技术标签:
【中文标题】直接文件路径不起作用【英文标题】:direct file path not working 【发布时间】:2013-08-10 21:24:26 【问题描述】:我有一个使用 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";
【问题讨论】:
看这个链接:How to get realative path for database? 我认为你不需要转义'\' 1) 源代码中的一个空白行总是就足够了。
之后或
之前的空行通常也是多余的。 2) 对代码块使用一致且符合逻辑的缩进。代码的缩进是为了帮助人们理解程序流程。 3)请学习常见的Java naming conventions(特别是用于名称的大小写)类,方法和属性名称并一致地使用它们。
File workingDir=new File(".");
这可能不是您所期望的。通过打印绝对路径来做一些基本的调试。
我想到了。我调试过了。打印绝对文件路径。如果您在下面查看,我使用系统资源来获取工作目录并将其附加文件名。我用于路径的字符串有效,附加的系统资源无效。并且布尔语句 one.equals(theOther) 返回 true。
【参考方案1】:
要获取当前工作目录的绝对路径,请使用:
System.getProperty("user.dir")
返回一个String
。
编辑:
如果你想用"/"
替换"\"
,使用这个:
String cwd = System.getProperty("user.dir").replaceAll("\\\\", "/");
或
String cwd = System.getProperty("user.dir").replaceAll(Pattern.quote("\\"), "/");
有关后两个语句中正则表达式用法的说明,请参阅here。
编辑 2(基于 cmets):
由于通过.equals()
比较两个字符串返回true
,我唯一能想到的是这是一个奇怪的NetBeans 问题。我建议尝试不同的 IDE,也许是 Eclipse。
【讨论】:
那也不起作用。我最初是这样做的,因为如果不转义反斜杠,它就无法工作。 另一篇文章说使用 / 所以不需要 \\ 但这也不起作用......自项目开始以来,我一直在努力解决这个问题。我在 main 方法的 runnable 中放置了一个文件选择器,这样用户就可以在打开主窗口之前选择 db 文件,但这对于“白痴打样”程序来说并不理想。 不,这些方法是完成我用我的方法所做的更有效的方法,但是它不会连接到 netbeans 之外。感谢您的帮助,我将继续使用它,希望对我有用。 顺便说一句,最后一枪,也许会点击...我可以将这些方法的输出复制粘贴到字符串文字中,并将字符串放入数据库变量中并运行...跨度> @derek 复制并粘贴任何有效的内容并通过.equals()
比较两个字符串,如果返回true
,那么显然问题出在其他地方。如果它返回 false,则通过 stringName.toCharArray()
逐个字符地打印字符串,看看有什么区别。如果问题出在其他地方,也许这个page 可能会对您有所帮助。以上是关于直接文件路径不起作用的主要内容,如果未能解决你的问题,请参考以下文章
“上传路径似乎无效”。 Codeigniter文件上传不起作用[关闭]