英文:
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语言的经验与见解,让所有开发者获益!

评论