gpt4 book ai didi

java - 将文件复制到 myClass 的相对路径中

转载 作者:行者123 更新时间:2023-12-01 15:14:21 25 4
gpt4 key购买 nike

这是我的应用程序目录

----dist
+-- lib //library folder
+-- backup //folder with my database backup filename = database_file.sqlite
|__ app.jar
|__ database_file.sqlite

当我对按钮执行操作时,我想关闭数据库连接,然后将 database_file.sqlitebackup 文件夹复制(覆盖)到根文件夹(dist) database_file.sqlite 加载到我的应用程序中。不久,我想在单击按钮时重新加载备份/原始数据库。注意:我使用默认包现在我有这段代码(见下文),但我不知道如何让它工作。

private void cmd_backupActionPerformed(java.awt.event.ActionEvent evt) {
int p = JOptionPane.showConfirmDialog(null, "Do you really want to reset your data / Backup database?", "Backup", JOptionPane.YES_NO_OPTION);
if (p == 0) {
InputStream inStream = null;
OutputStream outStream = null;
try {

rs.close();
pst.close();


File afile = new File("C:\\Users\\Tzontonel\\Documents\\NetBeansProjects\\RDSS\\dist\\backup\\database_file.sqlite");
File bfile = new File("C:\\Users\\Tzontonel\\Documents\\NetBeansProjects\\RDSS\\dist\\database_file.sqlite");
System.out.println(afile.getCanonicalPath());

inStream = new FileInputStream(afile);
outStream = new FileOutputStream(bfile);

byte[] buffer = new byte[1024];

int length;
//copy the file content in bytes
while ((length = inStream.read(buffer)) > 0) {

outStream.write(buffer, 0, length);

}

inStream.close();
outStream.close();

// delete the original file
// afile.delete();

System.out.println("File is copied successful!");


} catch (Exception e) {

JOptionPane.showMessageDialog(null, e);
}


}
}

最佳答案

类加载器不访问文件系统。它访问类路径中的资源。这里你不想使用类加载器,而是使用文件IO。因此,对 getResourceAsStream() 的调用没有意义(无论如何,您都将它返回的输入流替换为另一个输入流)。

将您的类放入包中,就像所有类一样。

现在,当您创建这样的文件时:

new File("database_file.sqlite")

您打开当前目录中的文件。而当前目录就是执行java命令的目录。因此,除非您在执行程序时始终位于 dist 目录中,否则您将无法使用此类相对路径打开该文件。

dist 目录的路径作为参数或系统属性传递给您的应用程序,并使用该目录作为基本目录来打开您的文件。

下一个问题是您同时打开同一个文件的输入流和输出流。您应该打开备份文件的输入流,以及数据库文件的输出流。

关于java - 将文件复制到 myClass 的相对路径中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11843517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com