我无法在Java方法中更改文件名。

huangapple 未分类评论49阅读模式
英文:

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(&quot;database.txt&quot;);
	FileReader fr = new FileReader(database);
	BufferedReader br = new BufferedReader(fr);
	
	File tempFile = new File(&quot;tempFile&quot;);
	FileWriter fw = new FileWriter(tempFile);
	BufferedWriter bw = new BufferedWriter(fw);
	
	String data = br.readLine();
	
	Scanner inputData = new Scanner(System.in);
	System.out.print(&quot;Masukkan judul buku : &quot;);
	String deleteString = inputData.nextLine();
	int num = 0;
	ArrayList&lt;Integer&gt; alNum = new ArrayList&lt;&gt;();
	ArrayList&lt;String&gt; alPenulis = new ArrayList&lt;&gt;();
	ArrayList&lt;String&gt; alJudul = new ArrayList&lt;&gt;();
	
	while(data != null) {
			StringTokenizer st = new StringTokenizer(data,&quot;,&quot;);
			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(&quot;Buku ditemukan : &quot;);
			System.out.println(&quot;---------------------------------------&quot;);
			System.out.println(&quot;No           : &quot; + num);
			System.out.println(&quot;Penulis      : &quot; + Penulis);
			System.out.println(&quot;Tahun        : &quot; + Tahun);
			System.out.println(&quot;Penerbit     : &quot; + Penerbit);
			System.out.println(&quot;Judul        : &quot; + Judul);
			alNum.add(num);
			alPenulis.add(Penulis);
			alJudul.add(Judul);
		}
		data = br.readLine();
	}	
	
	
	if(alPenulis.isEmpty()) {
		System.err.println(&quot;Buku tidak ditemukan&quot;);
	}
	else {
		if(alPenulis.size() == 1) {
			boolean multiBook= KlikYesorNo(&quot;Apakah anda ingin menghapus buku ini &quot;);
			if(multiBook) {
				fr = new FileReader(database);
				br = new BufferedReader(fr);
				data = br.readLine();
				
				while(data != null) {
					StringTokenizer st = new StringTokenizer(data,&quot;,&quot;);
					String Penulis = st.nextToken();
					st.nextToken();
					st.nextToken();
					String Judul = st.nextToken();
				if(!(Penulis.toLowerCase().contains(alPenulis.get(0).toLowerCase()) 
						&amp;&amp; Judul.toLowerCase().contains(alJudul.get(0).toLowerCase()))) {
					bw.write(data);
					bw.newLine();
				}
				data = br.readLine();
			}					
			} else {
				System.err.println(&quot;Buku tidak terhapus&quot;);
			}
		} else {
			boolean multiBook= KlikYesorNo(&quot;Apakah anda ingin menghapus salah satu buku diatas &quot;);
			if(multiBook) {
				inputData = new Scanner(System.in);
				System.out.print(&quot;Masukan no buku yang ingin dihapus : &quot;);
				int numBookDelete = inputData.nextInt();
				
				if((numBookDelete &lt; 1) || (numBookDelete &gt; alNum.size())){
					System.err.println(&quot;Anda salah memasukan nomor&quot;);
				} else {
				fr = new FileReader(database);
				br = new BufferedReader(fr);
				data = br.readLine();
				
				while(data != null) {
					StringTokenizer st = new StringTokenizer(data,&quot;,&quot;);
					String Penulis = st.nextToken();
					st.nextToken();
					st.nextToken();
					String Judul = st.nextToken();
				if(!(Penulis.toLowerCase().contains(alPenulis.get(numBookDelete - 1).toLowerCase()) 
						&amp;&amp; Judul.toLowerCase().contains(alJudul.get(numBookDelete - 1).toLowerCase()))) {
					System.out.println(data);
				}
				data = br.readLine();
			}					
				}
			} else {
				System.err.println(&quot;Buku tidak terhapus&quot;);
			}
		
		
		}
	
	}
	
	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.

huangapple
  • 本文由 发表于 2020年6月29日 16:22:41
  • 转载请务必保留本文链接:https://java.coder-hub.com/62633965.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定