Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  4 1345
Jeg har et program som skal skrive inn registreringer i en tekstfil. Dog, jeg klarer ikke å få den til ikke å overskrive det som allerede står der. Har prøvd ganske mye nå, og får det fremdeles ikke til. Kan noen hjelpe?
Koden:

Kode

import java.util.*;
import java.io.*;
public class Oblig2 {

    public static void main (String[] args) {
	final Scanner input = new Scanner (System.in);
	int menyvalg=0;
	Meny menyen = new Meny();
	
	menyen.meny(); 
	}
    }	

//Selve menyen til programmet i en egen klasse.
	
class Meny {

    PrintWriter fil;
    Scanner input = new Scanner (System.in);	
    
    public void meny() {
	try{
	    fil=new PrintWriter(new FileWriter("fugler.txt", false));
	} catch (IOException e) {
	    System.out.println("Filen finnes ikke");
	} 


	int menyvalg=0;
	int menykall=1; 
	//Menyen vil her bli repetert helt til en taster inn 4 og endrer menykall til 0.
	do{
	    //Selve menyen vil bli repetert helt til brukeren velger en av menyens alternativer.
	    do{
		System.out.println("====== Meny for registrering av fugleobservasjoner =====");

		System.out.println("\n1. Registrer en fugleobservasjon");
		System.out.println("2. Skriv ut alle fugleobservasjoner av en type");
		System.out.println("3. Skriv ut alle fugleobservasjoner på ett bestemt sted");
		System.out.println("4. Avslutt systemet");
	
		System.out.println("\nVennligst velg en aksjon: ");
		menyvalg = input.nextInt();
	    
	        } while(menyvalg < 1 || menyvalg > 4);
	    	    
	    switch (menyvalg){
	    case 1: registrering();
		break;
	    case 2: //fugleType();
		break; 
	    case 3:
		break;
	    case 4:menykall=0;
		    }
	    }while(menykall>=1); 
      }
    
    void registrering () {
	
	System.out.println("Velkommen til registreringen av fugleobservasjoner.");
	System.out.println("Begynner registreringen (Lagrer seg i filen fugler.txt): ");
	
	    try { 
		fil = new PrintWriter(new FileWriter("fugler.txt", false));
		PrintWriter skriv = new PrintWriter(fil); 
		System.out.println("\nVennligst tast inn fugletypen: ");
	        String fugletype = input.next();
	        skriv.write(fugletype + ","); 
		
		System.out.println("Tast inn fuglens kjonn (M/H/X): ");
		char fuglekjonn = input.next().charAt(0);
		skriv.write(fuglekjonn + ",");
		
		System.out.println("Tast inn observasjonslokasjon: ");
		String lokasjon = input.next();
		skriv.write(lokasjon + ",");
		
		System.out.println("Tast inn dato for observasjon (Som en string på formen mai2012): ");
		String dato = input.next();
		skriv.write(dato);

		fil.close();
	    }catch(Exception e){
		System.out.println("Åpning av fil feilet");
	    }
    }

     void fugleType () {
	System.out.println("Her kan du finne registrerte observasjoner med søk på typen fugl.");
	try{
	    Scanner output = new Scanner("fugler.txt");
		

	System.out.println("Vennligst spesifiser fugletype: ");

	int linjenummer = 0;

	while (output.hasNext()){
	    String fugletype = output.next();
	    linjenummer++;
	    if(fugletype.indexOf("fugler.txt")){
		System.out.println (linjenummer);
	    }
	}
	}catch (Exception e) {
	    System.out.println("Fant ikke filen");
	}
    }
}
I tillegg så lurte jeg litt på om noen kunne gi tips til metoden som heter fugleType. Vet at jeg kan lese dette et sted, men sliter med å få denne metoden til å søke etter et bestemt ord fra tekstfilen og deretter printe ut hele linjen dette ordet ligger i.
Jeg har hittil brukt easyIO, så er ikke helt stødig med scanner, men kan jeg gjette på at feilen ligger

Kode

fil = new PrintWriter(new FileWriter("fugler.txt", false));
Prøv med true isteden.

Angående å lese et bestemt ord i tekstfilen anbefaler jeg deg å hive hver linje inn i en array for så å bruke metoden contains() eller substring() for å finne ut om fuglen finnes i observasjonen (som du har lagt inn i en array).
Sist endret av Marr; 25. september 2013 kl. 13:53.
Trådstarter
Kunne du vært en engel og gitt meg et forslag på hvordan jeg best gjør dette? Sliter virkelig med oppgaven....
Her har du et eksempel:
PasteBin

Vil ikke anbefale deg å bruke koden min rett ut for den finnes også på diskusjon.no, men kan peke deg i riktig retning, les det inn fra fil og del det opp så matcher du det og skriver ut linjen om det evaluerer til sant.

Har brukt din opprinnelige kode, men gjorde det om til en klasse og endret på hvordan menyen ble kjørt, samt lagde sted og fugl metodene. De er praktisk talt identiske, med unntak av at de sjekker hver sitt felti arrayen som linjen legges i.
Det viktigste å få med seg her er at det er to forskjellige måter Java kan åpne og skrive til en fil på med FileWriter(File file, bool append). Med append=false vil Java starte å skrive fra posisjon 0 i filen, og dermed (delvis) overskrive det som allerede eksisterer der. Med append=true vil Java starte like etter slutten av filen (på tidspunktet hvor du åpner den). Så du var inne på rett løsning, bare bytt ut "false" med "true" i linjen som Marr påpeker.