英文:
I can't change the file name in a method in java
问题
以下是翻译好的代码部分:
public static void deleteBook() throws IOException{
File database = new File("database.txt");
FileReader fr = new FileReader(database);
BufferedReader br = new BufferedReader(fr);
File tempFile = new File("tempFile");
FileWriter fw = new FileWriter(tempFile);
BufferedWriter bw = new BufferedWriter(fw);
String data = br.readLine();
Scanner inputData = new Scanner(System.in);
System.out.print("Enter book title: ");
String deleteString = inputData.nextLine();
int num = 0;
ArrayList<Integer> alNum = new ArrayList<>();
ArrayList<String> alPenulis = new ArrayList<>();
ArrayList<String> alJudul = new ArrayList<>();
while(data != null) {
StringTokenizer st = new StringTokenizer(data, ",");
String Penulis = st.nextToken();
String Tahun = st.nextToken();
String Penerbit = st.nextToken();
String Judul = st.nextToken();
if(Judul.toLowerCase().contains(deleteString.toLowerCase())) {
num++;
System.out.println("Book found:");
System.out.println("---------------------------------------");
System.out.println("No : " + num);
System.out.println("Author : " + Penulis);
System.out.println("Year : " + Tahun);
System.out.println("Publisher : " + Penerbit);
System.out.println("Title : " + Judul);
alNum.add(num);
alPenulis.add(Penulis);
alJudul.add(Judul);
}
data = br.readLine();
}
if(alPenulis.isEmpty()) {
System.err.println("Book not found");
}
else {
if(alPenulis.size() == 1) {
boolean multiBook = KlikYesorNo("Do you want to delete this book ");
if(multiBook) {
fr = new FileReader(database);
br = new BufferedReader(fr);
data = br.readLine();
while(data != null) {
StringTokenizer st = new StringTokenizer(data, ",");
String Penulis = st.nextToken();
st.nextToken();
st.nextToken();
String Judul = st.nextToken();
if(!(Penulis.toLowerCase().contains(alPenulis.get(0).toLowerCase())
&& Judul.toLowerCase().contains(alJudul.get(0).toLowerCase()))) {
bw.write(data);
bw.newLine();
}
data = br.readLine();
}
} else {
System.err.println("Book not deleted");
}
} else {
boolean multiBook = KlikYesorNo("Do you want to delete one of the above books ");
if(multiBook) {
inputData = new Scanner(System.in);
System.out.print("Enter the book number you want to delete: ");
int numBookDelete = inputData.nextInt();
if((numBookDelete < 1) || (numBookDelete > alNum.size())){
System.err.println("You entered the wrong number");
} else {
fr = new FileReader(database);
br = new BufferedReader(fr);
data = br.readLine();
while(data != null) {
StringTokenizer st = new StringTokenizer(data, ",");
String Penulis = st.nextToken();
st.nextToken();
st.nextToken();
String Judul = st.nextToken();
if(!(Penulis.toLowerCase().contains(alPenulis.get(numBookDelete - 1).toLowerCase())
&& Judul.toLowerCase().contains(alJudul.get(numBookDelete - 1).toLowerCase()))) {
System.out.println(data);
}
data = br.readLine();
}
}
} else {
System.err.println("Book not deleted");
}
}
}
bw.flush();
fr.close();
br.close();
fw.close();
bw.close();
database.delete();
tempFile.renameTo(database);
}
希望这对你有所帮助。如果你还有其他问题,请随时问我。
英文:
The program runs well but the file does not change. Temp File created with files but can't rename, and original database file still there. I dont know what's wrong.
public static void deleteBook() throws IOException{
File database = new File("database.txt");
FileReader fr = new FileReader(database);
BufferedReader br = new BufferedReader(fr);
File tempFile = new File("tempFile");
FileWriter fw = new FileWriter(tempFile);
BufferedWriter bw = new BufferedWriter(fw);
String data = br.readLine();
Scanner inputData = new Scanner(System.in);
System.out.print("Masukkan judul buku : ");
String deleteString = inputData.nextLine();
int num = 0;
ArrayList<Integer> alNum = new ArrayList<>();
ArrayList<String> alPenulis = new ArrayList<>();
ArrayList<String> alJudul = new ArrayList<>();
while(data != null) {
StringTokenizer st = new StringTokenizer(data,",");
String Penulis = st.nextToken();
String Tahun = st.nextToken();
String Penerbit = st.nextToken();
String Judul = st.nextToken();
if(Judul.toLowerCase().contains(deleteString.toLowerCase())) {
num++;
System.out.println("Buku ditemukan : ");
System.out.println("---------------------------------------");
System.out.println("No : " + num);
System.out.println("Penulis : " + Penulis);
System.out.println("Tahun : " + Tahun);
System.out.println("Penerbit : " + Penerbit);
System.out.println("Judul : " + Judul);
alNum.add(num);
alPenulis.add(Penulis);
alJudul.add(Judul);
}
data = br.readLine();
}
if(alPenulis.isEmpty()) {
System.err.println("Buku tidak ditemukan");
}
else {
if(alPenulis.size() == 1) {
boolean multiBook= KlikYesorNo("Apakah anda ingin menghapus buku ini ");
if(multiBook) {
fr = new FileReader(database);
br = new BufferedReader(fr);
data = br.readLine();
while(data != null) {
StringTokenizer st = new StringTokenizer(data,",");
String Penulis = st.nextToken();
st.nextToken();
st.nextToken();
String Judul = st.nextToken();
if(!(Penulis.toLowerCase().contains(alPenulis.get(0).toLowerCase())
&& Judul.toLowerCase().contains(alJudul.get(0).toLowerCase()))) {
bw.write(data);
bw.newLine();
}
data = br.readLine();
}
} else {
System.err.println("Buku tidak terhapus");
}
} else {
boolean multiBook= KlikYesorNo("Apakah anda ingin menghapus salah satu buku diatas ");
if(multiBook) {
inputData = new Scanner(System.in);
System.out.print("Masukan no buku yang ingin dihapus : ");
int numBookDelete = inputData.nextInt();
if((numBookDelete < 1) || (numBookDelete > alNum.size())){
System.err.println("Anda salah memasukan nomor");
} else {
fr = new FileReader(database);
br = new BufferedReader(fr);
data = br.readLine();
while(data != null) {
StringTokenizer st = new StringTokenizer(data,",");
String Penulis = st.nextToken();
st.nextToken();
st.nextToken();
String Judul = st.nextToken();
if(!(Penulis.toLowerCase().contains(alPenulis.get(numBookDelete - 1).toLowerCase())
&& Judul.toLowerCase().contains(alJudul.get(numBookDelete - 1).toLowerCase()))) {
System.out.println(data);
}
data = br.readLine();
}
}
} else {
System.err.println("Buku tidak terhapus");
}
}
}
bw.flush();
fr.close();
br.close();
fw.close();
bw.close();
database.delete();
tempFile.renameTo(database);
}
I also used the database file in another method, but all went well and all buffered writers / readers have been closed in other methods. Please help me. Thank you.
专注分享java语言的经验与见解,让所有开发者获益!
评论