Wątek przeniesiony 2014-12-27 22:45 z Java przez bogdans.

Program na zasadzie bilbioteki - funkcja wyszukiwania

0

Witam, pisze program dzialajacy na zasadzie bazy danych w javie. Znaczy sie wpisuje sie do niego tytul ksiazki, autora, rok wydania i potem klikamy na przycisk dodaj i zapisuje sie to do pliku tekstowego o nazwie "pierwszy.txt", gdy klikamy na przycisk szukaj pojawia sie Inputbox gdzie po wpisaniu tylko tytulu wyswietla sie reszta informacji czyli autor, rok wydania itp. . Problem jest jednak ze jak wpisze ręcznie do pliku "pierwszy.txt" tytul ksiazki i autora to po kliknieciu na przycisk szukaj i wpisaniu tytulu te informacje sie wyswietlaja, jednak gdy wpisze najpierw w programie te dane i klikne dodaj, to potem mimo iz w pliku tekstowym tytul ksiazki i autor sie pojawia, jednak gdy klikne szukaj jest tak jakby ten plik tekstowy byl pusty. Probowalam to naprawic tak zeby stworzyc dwa pliki tekstowe "pierwzy.txt" i "drugi.txt" i zeby po kliknieciu dodaj najpierw sie zapisywalo do pliku pierwszy.txt a potem przekopiowywalo do pliku drugi.tx i po kliknieciu szukaj juz operowaloby sie na tym pliku drugi.txt jdenak to nic nie daje.

 
JButton przycisk11 = new JButton("Szukaj");
		przycisk11.setSize(80,50);
		przycisk11.setLocation(370,320);
		add(przycisk11);
		
	    przycisk11.addActionListener(new ActionListener()
		{
			
			
			public void actionPerformed(ActionEvent e) {
				HashMap<String, String> map = new HashMap<String, String>();
				 Scanner scan = null;
				 
				
					
					try {
						scan = new Scanner(new File("drugi.txt"));
					} catch (FileNotFoundException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				
			     
				 String tytul;
				 String informacje;
				 
				 while(scan.hasNextLine()){
					 tytul = scan.nextLine();
					 informacje = scan.nextLine();
					 
					 map.put(tytul, informacje);
				 }
				 while((tytul = JOptionPane.showInputDialog("Wpisz tytuł książki")) != null){
					 informacje = map.get(tytul);
					 if ( informacje == null) informacje = "Nie ma książki w bazie danych";
					 JOptionPane.showMessageDialog(null, "Tytuł : " + tytul + '\n' + "" + informacje);
				 }
				 
				
		}
JButton przycisk10 = new JButton("Dodaj");
		przycisk10.setSize(80,50);
		przycisk10.setLocation(120,320);
		add(przycisk10);
		przycisk10.addActionListener(new ActionListener()
		{
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				 String pole = pole_t.getText();
				 String pole1 = pole_s.getText();
				 String pole2 = pole_u.getText();
				 String pole3 = pole_w.getText();
				 
				 String wynik = pole + " \r\n" + pole1 + " " + pole2 + "  " + pole3 + " \r\n";
				 
				 
				 
				 try {
					 
					Scanner scan = new Scanner(new File("pierwszy.txt"));
				} catch (FileNotFoundException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				 FileWriter fileWritter = null;
				try {
					fileWritter = new FileWriter("pierwszy.txt",true);
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			        BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
			        try {
						bufferWritter.write(wynik);
						bufferWritter.close();
						
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
			        try {
						bufferWritter.close();
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
			        InputStream inStream = null;
					OutputStream outStream = null;
				 
				    	try{
				 
				    	    File afile =new File("pierwszy.txt");
				    	    File bfile =new File("drugi.txt");
				 
				    	    inStream = new FileInputStream(afile);
				    	    outStream = new FileOutputStream(bfile);
				 
				    	    byte[] buffer = new byte[1024];
				 
				    	    int length;
				    	    //copy the file content in bytes 
				    	    while ((length = inStream.read(buffer)) > 0){
				 
				    	    	outStream.write(buffer, 0, length);
				 
				    	    }
				 
				    	    inStream.close();
				    	    outStream.close();
				 
				    	    System.out.println("File is copied successful!");
				 
				    	}catch(IOException e1){
				    		e1.printStackTrace();
				    	}
				
			}

			private void copyFileUsingStream(File source, File dest) {
				// TODO Auto-generated method stub
				
			}
		}); 
0

U mnie Twój kod działa (bez pliku drugi.txt). Czy w tytułach "ręcznie" dopisywanych książek są polskie litery?

0

Pewnie źle dopisujesz ręcznie, ten fragment

                 while(scan.hasNextLine()){
                     tytul = scan.nextLine();
                     informacje = scan.nextLine();

wymaga by w pliku była parzysta ilość wierszy. Jeżeli dopisując ręcznie, nie naciśniesz ENTER po dopisaniu wiersza z informacją, to dane dopisane przez program spowodują, że ilość wierszy będzie nieparzysta. Po dopisaniu ręcznym (bez ENTERA) plik wygląda tak:

Lato
Jan Chrzan 2013

Po dopisaniu przez program nowej książki, plik wygląda tak:

Lato
Jan Chrzan 2013Zima
Ewa Zdrzewa 2011

Szukanie wygeneruje wyjątek.

1 użytkowników online, w tym zalogowanych: 0, gości: 1