2016-08-30 69 views
-1

我目前正在制作一个项目,它有一个使用文本文件的用户名和密码系统。要尝试保持我的项目组织,它们位于相同的netbeans文件夹中。但是,这些文件在src\classes\prototype1\textFiles之下,但添加用户时正在编辑的文件在build\classes\prototype1\textFiles之下。造成这个问题的原因是,无论何时重新启动netbeans,它只会关闭我在src文件夹中的原始数据,而不会从build文件夹中编辑的数据。编辑Java源文件

我使用的代码是:

try { 
    File f = new File(getClass().getResource("textFiles\\PasswordScreen.txt").toURI()); 
    f.setWritable(true); 
    FileWriter w = new FileWriter(f); 
    BufferedWriter writer = new BufferedWriter(w); 
    wipeFile(f); 
    for (int i = 0; i <= length; i++){ 
     writer.write(user[i].getUsername()); 
     writer.newLine(); 
     writer.write(user[i].getPassword()); 
     writer.newLine(); 
     writer.write(Integer.toString(user[i].getState())); 
     writer.newLine(); 
     writer.write("-"); 
     writer.newLine(); 
    } 
    writer.close(); 
    f.setReadOnly(); 
} catch(Exception e){System.out.println("error writing to file");} 
+0

'src /'下的任何东西都是纯粹要编译的Java代码。你不应该放置任何资源文件。 –

+1

为什么在'build'文件夹中编辑文件?一旦将代码部署到.jar文件中,该文件甚至不会成为硬盘上的文件。您编辑的任何文件都必须在应用程序代码层次结构的外部。 – Andreas

+1

资源应被视为只读。应用程序通常以.jar文件形式提供,在这种情况下,您将无法写入资源,因为它不会是单独的文件。 (另外,'getResource'在所有平台上都使用正斜杠('/')作为文件分隔符;参数本质上是一个相对URL。) – VGR

回答

1

这是效果的混合。

您正在寻址的文件位于classes文件夹中:此文件夹是编译器的输出文件夹。因此,它包含每个定义的易失性内容,因为内容是从src文件夹创建的。

当启动IDE(本例中为NetBeans)时,它将清理项目并重建类,覆盖以前编辑的用户设置。

解决方法很简单:不要将编辑的文件写入classes文件夹。使用其他位置,例如当前目录。这通常是IDE启动的项目根目录,并且可以被正确控制。

您可能希望将文件的位置配置在某处(命令行,环境变量,...)。

+0

谢谢,我会在早上尝试这个,然后回报! –