codestory

Die Anleitung zu Java Writer

  1. Writer
  2. write(int)
  3. write(char[])
  4. write(char[], int, int)
  5. close()
  6. write(String)
  7. write(String, int, int)
  8. append(CharSequence)
  9. append(CharSequence, int , int)
  10. append(char)
  11. flush()

1. Writer

Writer ist eine Klasse im Paket java.io. Es ist eine Basisklasse, die einen Zeichenstrom(stream of characters) darstellt, um die Zeichen in ein Ziel zu schreiben, z.B eine Textdatei.
public abstract class Writer implements Appendable, Closeable, Flushable
Grundsätzlich können Sie die Klasse Writer nicht direkt verwenden, da es sich um eine abstrakte Klasse handelt. In einem bestimmten Fall können Sie jedoch eine der Unterklassen verwenden.
Stellen Sie sich ein Szenario vor, in dem die folgenden Zeichen in eine Datei mit der Code UTF-8 geschrieben werden:
JP日本-八洲
Java verwendet 2 bytes zum Speichern eines Zeichen. Hier ist eine Darstellung der bytes des oben genannten Textes:
FileWriter ist eine Unterklasse der Writer, die häufig zum Schreiben von Zeichen in eine Textdatei verwendet wird. Jedes Zeichen in Writer sind 2 bytes. Wenn Sie jedoch in eine Textdatei UTF-8 schreiben, kann jedes Zeichen mit 1, 2, 3 oder 4 bytes gespeichert werden.
Sehen Sie auch meine Erklärung, wie Java die Zeichen Java in die Zeichen UTF-8 konvertiert:
Writer methods
public static Writer nullWriter()

public void write(int c) throws IOException

public void write(char cbuf[]) throws IOException

public void write(char cbuf[], int off, int len) throws IOException

public void write(String str) throws IOException

public void write(String str, int off, int len) throws IOException

public Writer append(CharSequence csq) throws IOException

public Writer append(CharSequence csq, int start, int end) throws IOException

public Writer append(char c) throws IOException

public void flush() throws IOException

public void close() throws IOException

2. write(int)

public void write(int chr) throws IOException
Schreiben Sie ein Zeichen an Writer. Der Parameter chr ist der Code des Zeichens, bei dem es sich um einen Integer zwischen 0 und 65535. Wenn der Wert von chr außerhalb des obigen Bereichs liegt, wird er ignoriert.
Writer_write_ex1.java
package org.o7planning.writer.ex;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.nio.charset.StandardCharsets;

public class Writer_write_ex1 {

    // Windows path: C:/Somedirectory/out-file.txt
    private static final String file_path = "/Volumes/Data/test/out-file.txt";

    public static void main(String[] args) throws IOException {
        File file = new File(file_path);
        // Create parent folder:
        file.getParentFile().mkdirs();

        // FileWriter constructor in Java 11.
        Writer writer = new FileWriter(file, StandardCharsets.UTF_8);

        writer.write((int)'J'); // 74
        
        writer.write((int)'P'); // 80
        
        writer.write((int)'日'); // 26085  
        
        writer.write(26412);     // 本
        
        writer.write((int)'-');  // 45
        
        writer.write(20843);    // 八
        
        writer.write((int)'洲'); // 27954
        
        writer.close();
    }
}
Output:
out-file.txt
JP日本-八洲

3. write(char[])

public void write(char[] cbuf) throws IOException
Schreiben Sie ein Zeichenarrray in Writer.
Writer_write_ex2.java
package org.o7planning.writer.ex;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.nio.charset.StandardCharsets;

public class Writer_write_ex2 {

    // Windows path: C:/Somedirectory/out-file.txt
    private static final String file_path = "/Volumes/Data/test/out-file.txt";

    public static void main(String[] args) throws IOException {
        File file = new File(file_path);
        // Create parent folder:
        file.getParentFile().mkdirs();

        // FileWriter constructor in Java 11.
        Writer writer = new FileWriter(file, StandardCharsets.UTF_8);

        writer.write((int)'J'); // 74
        
        char[] cbuf = new char[] {'P', '日', '本', '-', '八', '洲'};
        
        writer.write(cbuf);  
        
        writer.close();
    }
}
Output:
out-file.txt
JP日本-八洲

4. write(char[], int, int)

public void write(char[] cbuf, int off, int len) throws IOException
Schreiben Sie einen Teil eines Zeichenarrays in Writer. Schreiben Sie die Zeichen von Index offset bis zu Index offset+len.
Writer_write_ex3.java
package org.o7planning.writer.ex;

import java.io.IOException;
import java.io.StringWriter;

public class Writer_write_ex3 {

    public static void main(String[] args) throws IOException {
        // StringWriter is a subclass of Writer.
        StringWriter stringWriter = new StringWriter();  
        
        char[] cbuf = new char[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
        
        stringWriter.write(cbuf, 2, 5); // '2', ...'6'
        
        String s = stringWriter.toString();
        System.out.println(s);
        
        stringWriter.close();
    }
}
Output:
23456

5. close()

public void close() throws IOException
Die Methode close() wird verwendet, um diesen Stream zu schließen. Die Methode flush() wird zuerst aufgerufen. Sobald der Stream geschlossen wurde, führen die Aufrufe von write() oder flush() dazu, dass eine IOException ausgelöst wird. Das Schließen eines vorher geschlossenen Streams hat keine Auswirkung.
public interface Closeable extends AutoCloseable
Die Klasse Writer implementiert die Interface Closeable. Wenn Sie die Code nach den Regeln von AutoCloseable schreiben, schließt das Stream automatisch für Sie, ohne die Methode close() direkt aufrufen zu müssen.
Writer_close_ex1.java
package org.o7planning.writer.ex;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.nio.charset.StandardCharsets;

public class Writer_close_ex1 {

    // Windows path: C:/Somedirectory/out-file.txt
    private static final String file_path = "/Volumes/Data/test/out-file.txt";

    public static void main(String[] args) throws IOException {
        File file = new File(file_path);
        // Create parent folder:
        file.getParentFile().mkdirs();
        
        try (Writer writer = new FileWriter(file, StandardCharsets.UTF_8)) {
            writer.write((int) 'J'); // 74
            writer.write((int) 'P'); // 80
            writer.write((int) '日'); // 26085
            writer.write(26412); // 本
            writer.write((int) '-'); // 45
            writer.write(20843); // 八
            writer.write((int) '洲'); // 27954
        }
    }
}
  • Die Anleitung zu Java Closeable

6. write(String)

public void write(String str) throws IOException
Schreiben Sie ein String an Writer.
Zum Beispiel:
writer.write("Some String");

7. write(String, int, int)

public void write(String str, int offset, int len) throws IOException
Schreiben Sie einen Teil eines String an Writer. Schreiben Sie die Zeichen von Index offset zu Index offset+len zum Writer.
Zum Beispiel:
writer.write("0123456789", 2, 5); // 23456

8. append(CharSequence)

public Writer append(CharSequence csq) throws IOException
Hängen Sie die Zeichen von CharSequence an Writer an. Diese Methode gibt das aktuelle Objekt Writer zurück, mit dem Sie eine andere Methode Writer aufrufen können, anstatt mit einem Semikolon ( ; ) zu enden.
Writer_append_ex1.java
package org.o7planning.writer.ex;

import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;

public class Writer_append_ex1 {

    public static void main(String[] args) throws IOException {
        // StringWriter is a subclass of Writer.
        Writer writer = new StringWriter();

        writer.append("01234").append("5678").write("9");

        System.out.println(writer.toString()); // 0123456789

        writer.close();
    }
}

9. append(CharSequence, int , int)

public Writer append(CharSequence csq, int start, int end) throws IOException
Hängen Sie einen Teil von CharSequence an Writer an. Diese Methode gibt das aktuelle Objekt Writer zurück.

10. append(char)

public Writer append(char chr) throws IOException
Hängen Sie einen Zeichen an Writer an. Diese Methode gibt das aktuelle Objekt Writer zurück, mit dem Sie eine andere Methode von Writer aufrufen können, anstatt mit dem Semikolon ( ; ) zu enden.
Writer_append_ex2.java
package org.o7planning.writer.ex;

import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;

public class Writer_append_ex2 {

    public static void main(String[] args) throws IOException {

        Writer writer = new StringWriter();

        writer.append('J').append('P').append('日').append('本');

        System.out.println(writer.toString()); // JP日本
        writer.close();
    }
}

11. flush()

public void flush() throws IOException
Die Daten, die Sie in Writer schreiben, werden manchmal vorläufig in einem Puffer gespeichert. Die Methode flush() wird verwendet, um die gesamten Daten im Puffer in das Ziel zu leeren.
Sie können den folgenden Artikel über BufferedWriter lesen, um mehr über die Methode flush() zu erfahren.
Wenn das beabsichtigte Ziel dieses Writer eine vom zugrunde liegende Betriebssystem bereitsgestellte Abstraktion ist, z.B eine Datei, garantiert das Leeren des Streams nur, dass zuvor in den Stream geschriebene Zeichen zum Schreiben an das Betriebssystem übergeben werden. Es kann nicht garantiert werden, dass sie tatsächlich auf ein physisches Gerät wie ein Festplattenlaufwerk geschrieben werden.

Die Anleitungen Java IO

Show More