Avatar billede kasper_aaroe Nybegynder
03. november 2008 - 08:36 Der er 10 kommentarer og
1 løsning

Gemme configuration i txt fil?

Hej,

Jeg har gang i et mindre program hvor man kan ædre lidt få indstillinger, de indstillinger vil jeg self. gerne have man kan gemme så det er de samme næste gang man åbner programmet.

Havde tænkt på at lave det så, de enkle settings bliver gemt i et array, som bliver skrevet over i en .txt fil - når man så starter programmet skal det loades ind i et array og så skal de enkle installinger læses fra arraryet.


Men hvordan - no idea har søgt på et utal af sider efter at læse/skrive til fil, og læse fra array til fil/skrie fra fil til array..


Helt på bar bund, det kan også være der er smartere måder at gøre det på, det er max 8 settings der skal gemmes.


på forhånd tak
Kasper
Avatar billede erikjacobsen Ekspert
03. november 2008 - 09:29 #1
Andre har lavet arbejdet for dig: http://commons.apache.org/configuration/
Det er kun at sætte sig ind i hvordan de gør.
Avatar billede kasper_aaroe Nybegynder
03. november 2008 - 09:35 #2
#erikjacobsen

bare og bare.. burde måske nævne jeg programmnere Java for min 4 uge pt. så ting der virker lige til for Java programmører tager altså et godt stykke tid for mig at regne ud.
Avatar billede erikjacobsen Ekspert
03. november 2008 - 10:00 #3
Ok. Men så er spørgsmålet: er det fordi du skal have gemt en konfiguration, eller er det fordi du skal lære at programmere (Java) ?
Avatar billede kasper_aaroe Nybegynder
03. november 2008 - 10:08 #4
#erikjacobsen

og så er svaret: det er fordi jeg skal skal gemme en konfiguration, og lærer det.
Java lærer jeg bedst ved at programmere det, når jeg sidder fast lærer jeg det bedst ved at se løsningn, læse den igennem og finde ud af hvordan det fungere - og så programmere det selv.

Så begge dele.
Avatar billede erikjacobsen Ekspert
03. november 2008 - 11:24 #5
Jo, men det gør det ikke nemmere at vælge.
1) Hvis det er for at gemme en konfiguration, gør man det bedste: bruger noget indbygget, eller noget andre (troværdige) har lavet. Det plejer at være best practice.
2) Hvis det er for at lære, så er det jo fint at begynde med at læse og skrive filer. Det kan så smides væk, når man lærer noget mere.

Mit forslag fra første indlæg er selvfølgelig ikke eneste mulighed. Lidt mere jordnært kan man læse og skrive XML på filer.

Er det 2)-eren så http://www.finddetselv.net/search?q=write+files+java
Avatar billede kasper_aaroe Nybegynder
03. november 2008 - 12:20 #6
#erikjacobsen

Det er 2eren jeg er på så.
Men, ville ikke have spurgt herinde hvis ikke jeg havde søgt google tynd, fandt inden jeg fik brug for at skrive/læse fra filer en god guide, men har ikke kunne finde den siden.
De sidste jeg har ledt efter er en måde at læse en tekst fil ind i et array, og den anden vej, altså fra et array til en tekst fil
Avatar billede arne_v Ekspert
03. november 2008 - 13:07 #7
Hvis du bruger en simpel properties fil, så er den meget nem både at læse ind og at skrive.
Avatar billede erikjacobsen Ekspert
03. november 2008 - 13:31 #8
Når du ikke ved hvor mange linier, der er, så kan du bruge Readline http://java.sun.com/j2se/1.5.0/docs/api/java/io/BufferedReader.html#readLine() og putte det i en ArrayList efterhånden. Arrays er bedst når du kender størrelsen.
Avatar billede usse Nybegynder
03. november 2008 - 17:12 #9
import java.io.*;
import java.util.*;

public class ReadWriteFile
{
    private List<String> list;
    private FileWriter fw;
    private FileReader fr;
    private BufferedReader br;
    private BufferedWriter bw;
    private File f;
       
    public ReadWriteFile( String file )
    {
        try
        {
            loadFile( file );
        }
        catch( Exception ex )
        {
            ex.printStackTrace();
        }
    }
   
    public void loadFile( String filedes ) throws Exception
    {
        list = new ArrayList<String>();
        f = new File( filedes );
        fr = new FileReader( f );
        fw = new FileWriter( f, true );
        br = new BufferedReader( fr );
        bw = new BufferedWriter( fw );
   
    }
   
    public void readFileIntoList() throws Exception
    {   
        while( br.ready() )
        {
            String line = br.readLine();
            System.out.println( line );
            list.add( line );
        }           
    }
   
    public String getData( int row )
    {
        if( row < list.size() )
            return list.get( row );
        return null;
    }
   
    public void setData( int row, String data )
    {
        if( row < list.size() )
            list.set( row, data );
    }
   
    public void writeListToFile() throws Exception
    {
        fw = new FileWriter( f, false );
        for( int i=0; i<list.size(); i++ )
        {
            bw.newLine();
            bw.write( list.get( i ) );
            bw.flush();
        }
    }
   
    public static void main( String args[] )
    {
        try
        {
            ReadWriteFile rwf = new ReadWriteFile( "C:\\blabla\\file.txt" );
            rwf.readFileIntoList();
            rwf.setData( 1, "Laala" );
            rwf.writeListToFile();
        }
        catch( Exception ex )
        {
            ex.printStackTrace();
        }
    }
}
Avatar billede arne_v Ekspert
07. november 2008 - 03:23 #10
Jeg vil mene at den indbyggede Properties klasse vil passe perfekt til opgaven som beskrevet.

test.props før:

k1=noget

program:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;

public class PropsFun {
    private static final String PROPS_FILE = "C:\\test.props";
    public static void main(String[] args) throws IOException {
        Properties p = new Properties();
        System.out.println("Read props file");
        InputStream is = new FileInputStream(PROPS_FILE);
        p.load(is);
        is.close();
        System.out.println("Get value of k1");
        System.out.println("k1=" + p.get("k1"));
        System.out.println("Change value of k1");
        p.put("k1", "nogetandet");
        System.out.println("Write props file");
        OutputStream os = new FileOutputStream(PROPS_FILE);
        p.store(os, "Ændret som demo");
        os.close();
    }
}

kørsel:

Read props file
Get value of k1
k1=noget
Change value of k1
Write props file

test.props efter:

#Ændret som demo
#Thu Nov 06 21:22:58 EST 2008
k1=nogetandet
Avatar billede kasper_aaroe Nybegynder
07. november 2008 - 08:04 #11
Prøver lige de forskellige måder i har nævt, men skal lige ordne nogle andre ting i programmet inden jeg får brug for "gemme funktionen"
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester