Datei schreiben



  • hallo,

    ich bekomme die name der Datei übergeben un ich will die Datei im Filesystem schreiben

    int aSize
    File aFile = new File(myPath+"/",fileName);

    FileInputStream bis = new FileInputStream(aFile);
    FileOutputStream fos = new FileOutputStream(aFile);
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    int c;
    while (( c = bis.read()) != EOF ) // oder schneller
    bos.write( (byte)c );
    bos.close();
    fos.close();
    aSize = aFile.length();
    ...

    es geht nicht warum ????



  • hi, probiers mal so:

    try {
            BufferedWriter out = new BufferedWriter(new FileWriter("outfilename"));
            out.write("Der Satz steht dann drin:-)!");
            out.close();
        } catch (IOException e) {
        }
    

    wenn die datei noch nicht existiert, wird sie angelegt!

    gruß math55



  • Hallo

    Also als erstes solltest du mal den Unterschied zwischen Streams und Writer Klassen in Java kennen.

    Wie du an der Java Api erkennen kannst können die Writer klassen nur char[] schreiben oder lesen.

    Die Strems dagegen können nur byte[] lesen und schreiben.

    Das was du mit deinem Code machst ist nichts anderes als die anzahl der gelesenen Zeichen in die Datei zu schreiben, du solltest aber die Zeichen selber schreiben.

    Versuch es mal damit.

    try {
          FileInputStream fileIn = new FileInputStream("Meine Datei");
          FileOutputStream fileOut = new FileOutputStream("AusgabeDatei");
          byte[] buf = new byte[1024];
          int l=0;
          while((l = fileIn.read(buf, 0, buf.length))!= -1){
            fileOut.write(buf,0,l);
          }
        }
        catch (IOException ex1) {
        }
    


  • oder auch mal a bissel nio

    long start,end;
    start = System.currentTimeMillis();
    
    FileInputStream fin = new FileInputStream( infile );
    FileOutputStream fout = new FileOutputStream( outfile );
    FileChannel inc = fin.getChannel();
    FileChannel outc = fout.getChannel();
    // ByteBuffer buffer = ByteBuffer.allocate( 1024 );
    ByteBuffer buffer = ByteBuffer.allocateDirect( 1024 );
    
    while (true) {
        int ret = inc.read( buffer );
        if (ret==-1) 
            break;
        buffer.flip();
        outc.write( buffer );
        buffer.clear();
    }
    end = System.currentTimeMillis();
    System.out.println("Verarbeitungszeit: " + (end-start));
    

    muss aber gestehen das ich zur traditionelle Methode kein Performance unterschied feststellen konnte...Vielleicht liegts ja an meinem System.

    Wenn jemand lusst hat kann er's ja mal testen und berichten

    bis dänn, O'Dog


Anmelden zum Antworten