Java 当我想添加更多数据时,如何不覆盖文本文件中已有的数据
这是我打开txt文件时使用的代码,但每次我想输入更多数据时,它都会覆盖数据Java 当我想添加更多数据时,如何不覆盖文本文件中已有的数据,java,formatter,Java,Formatter,这是我打开txt文件时使用的代码,但每次我想输入更多数据时,它都会覆盖数据 private Formatter X; private File Y = new File("C:\\Users\\user\\workspace\\Property Charge Management System\\users.txt"); private Scanner Z; public String[][] PCMSarray; public boolean OpenFil
private Formatter X;
private File Y = new File("C:\\Users\\user\\workspace\\Property Charge Management System\\users.txt");
private Scanner Z;
public String[][] PCMSarray;
public boolean OpenFile() {
try{
if(Y.exists()==false){
X = new Formatter("users.txt");
}
return true;
}
catch(Exception e){
System.out.println("File has not yet been created.");
return false;
}
}
这是我用来写入文件的代码,但它可以工作
public void WriteToFilecmd(){
Scanner input = new Scanner(System.in);
System.out.println("Please enter your First name");
String Fname = input.next();
System.out.println("Please enter your Last name");
String Lname = input.next();
System.out.println("Please enter your Password");
String Password = input.next();
System.out.println("Please enter your user ID");
String ID = input.next();
System.out.println("Please enter the first address line of your Property");
String addressln1 = input.next();
System.out.println("Please enter the second address line of your Property");
String addressln2 = input.next();
System.out.println("Please enter the third address line of your Property");
String addressln3 = input.next();
System.out.println("Please enter the properties estimated market value");
String EstimatedPropertyValue = input.next();
System.out.println("Please enter your tax owed");
String Taxowed = input.next();
input.close();
X.format("%1$20s %2$20s %3$20s %4$20s %5$20s %6$20s %7$20s %8$20s %9$20s \n",Fname,Lname,Password,ID,addressln1,addressln2,addressln3,EstimatedPropertyValue,Taxowed);
}
为格式化程序使用不同的构造函数,该构造函数接受可追加的FileWriter,并构造FileWriter,使其追加到文件末尾:
// the second boolean parameter, true, marks the file for appending
FileWriter fileWriter = new FileWriter(fileName, true);
Formatter formatter = new Formatter(fileWriter);
另外,请学习并遵循Java命名规则,否则您的代码将不容易被其他人(即我们)理解!。变量和方法名称应以小写字母开头。对格式化程序使用不同的构造函数,该构造函数采用可追加的FileWriter,并构造FileWriter,使其追加到文件末尾:
// the second boolean parameter, true, marks the file for appending
FileWriter fileWriter = new FileWriter(fileName, true);
Formatter formatter = new Formatter(fileWriter);
另外,请学习并遵循Java命名规则,否则您的代码将不容易被其他人(即我们)理解!。变量和方法名称应以小写字母开头。您的代码在许多方面有点混乱,但我认为问题在于您正在测试:
C:\\Users\\user\\workspace\\Property Charge Management System\\users.txt
但是你现在开始了
users.txt
。。。这恰好是一个不同的文件,因为您当前的目录不是您认为应该的目录
即使这不是导致问题的原因,你也应该解决它。执行代码时,如果当前目录不是C:\Users\user\workspace\Property Charge Management System,则当前编写代码的方式将中断
如果您真的想附加到文件而不是覆盖它,那么您需要使用一个格式化程序构造函数,它接受一个打开的输出流或写入程序。。。并向其提供已在追加模式下打开的流
我也不应该说您在代码中犯了严重的样式错误。Java代码的通用规则是变量名和方法名必须以小写字母开头。人们认为任何以大写字母开头的东西都是类。。。除非名称都是大写,这是为清单常量保留的。您的代码在许多方面有点混乱,但我认为问题在于您正在测试:
C:\\Users\\user\\workspace\\Property Charge Management System\\users.txt
但是你现在开始了
users.txt
。。。这恰好是一个不同的文件,因为您当前的目录不是您认为应该的目录
即使这不是导致问题的原因,你也应该解决它。执行代码时,如果当前目录不是C:\Users\user\workspace\Property Charge Management System,则当前编写代码的方式将中断
如果您真的想附加到文件而不是覆盖它,那么您需要使用一个格式化程序构造函数,它接受一个打开的输出流或写入程序。。。并向其提供已在追加模式下打开的流
我也不应该说您在代码中犯了严重的样式错误。Java代码的通用规则是变量名和方法名必须以小写字母开头。人们认为任何以大写字母开头的东西都是类。。。除非名称都是大写字母,这是为清单常量保留的。可能希望用它所用的语言对其进行标记,但有一些杂项提示:用小写字母id而不是id开始变量名,因为遵循Java命名约定有助于提高可读性。使用相关变量名调用Scanner Scanner,而不是Z。尝试发布一个完整的可编译示例,并对其进行精简,以便我们可以将重点放在与您的问题无关的WriteToFilecmd方法的详细信息上。在finally块中调用input.close,以确保即使引发异常也始终执行它。写y、 exists,而不是y.exists==false。与字符串[][]相比,更喜欢列表。可能需要使用它所用的语言来标记它。一些杂项提示:使用小写字母id而不是id来开始变量名,因为遵循Java命名约定有助于提高可读性。使用相关变量名调用Scanner Scanner,而不是Z。尝试发布一个完整的可编译示例,并对其进行精简,以便我们可以将重点放在与您的问题无关的WriteToFilecmd方法的详细信息上。在finally块中调用input.close,以确保即使引发异常也始终执行它。写y、 exists,而不是y.exists==false。首选列表而不是字符串[]。