logo

Vytvoření souboru pomocí FileOutputStream

Třída FileOutputStream patří do byte stream a ukládá data ve formě jednotlivých bajtů. Lze jej použít k vytváření textových souborů. Soubor představuje uložení dat na druhém paměťovém médiu, jako je pevný disk nebo CD. Zda je soubor dostupný nebo může být vytvořen, závisí na základní platformě. Některé platformy zejména umožňují otevření souboru pro zápis pouze jedním FileOutputStream (nebo jinými objekty pro zápis souborů) současně. V takových situacích konstruktory v této třídě selžou, pokud je příslušný soubor již otevřen. FileOutputStream je určen pro zápis proudů nezpracovaných bajtů, jako jsou obrazová data. Pro psaní proudů znaků zvažte použití FileWriter. Důležité metody:
    void close() : Zavře tento výstupní proud souboru a uvolní veškeré systémové prostředky spojené s tímto proudem. protected void finalize() : Vyčistí připojení k souboru a zajistí, že metoda close tohoto výstupního datového proudu souboru bude volána, když již neexistují žádné odkazy na tento proud. void write(byte[] b): Zapíše b.length bajty ze zadaného pole bajtů do tohoto výstupního proudu souboru. void write(byte[] b int off int len) : Zapíše len bajty ze zadaného bajtového pole počínaje offsetem do tohoto výstupního proudu souboru. void write(int b): Zapíše určený bajt do tohoto výstupního proudu souboru.
Chcete-li vytvořit textový soubor, který obsahuje některé znaky (nebo text), postupujte podle následujících kroků:
    Čtení dat: First of all data should be read from the keyboard. For this purpose associate the keyboard to some input stream class. The code for using DataInputSream class for reading data from the keyboard is as:
    DataInputStream dis =new DataInputStream(System.in);
    Here System.in represent the keyboard which is linked with DataInputStream object Odeslat data do OutputStream: Now associate a file where the data is to be stored to some output stream. For this take the help of FileOutputStream which can send data to the file. Attaching the file.txt to FileOutputStream can be done as:
    FileOutputStream fout=new FileOutputStream(file.txt);
    Čtení dat z DataInputStream: The next step is to read data from DataInputStream and write it into FileOutputStream . It means read data from dis object and write it into fout object as shown here:
    ch=(char)dis.read(); fout.write(ch);
    Zavřete soubor:Nakonec by měl být jakýkoli soubor po provedení vstupních nebo výstupních operací uzavřen, jinak mohou být poškozena data souboru. Uzavření souboru se provede uzavřením souvisejících proudů. Například fout.close(): zavře FileOutputStream, takže neexistuje způsob, jak zapsat data do souboru.
Implementace: Java
//Java program to demonstrate creating a text file using FileOutputStream import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.FileOutputStream; import java.io.IOException; class Create_File {  public static void main(String[] args) throws IOException   {  //attach keyboard to DataInputStream  DataInputStream dis=new DataInputStream(System.in);  // attach file to FileOutputStream  FileOutputStream fout=new FileOutputStream('file.txt');  //attach FileOutputStream to BufferedOutputStream  BufferedOutputStream bout=new BufferedOutputStream(fout1024);  System.out.println('Enter text (@ at the end):');  char ch;  //read characters from dis into ch. Then write them into bout.  //repeat this as long as the read character is not @  while((ch=(char)dis.read())!='@')  {  bout.write(ch);  }  //close the file  bout.close();  } } 
If the Program is executed again the old data of file.txt will be lost and any recent data is only stored in the file. If we don’t want to lose the previous data of the file and just append the new data to the end of already existing data and this can be done by writing true along with file name.
FileOutputStream fout=new FileOutputStream(file.txttrue); 

Zlepšení efektivity pomocí BufferedOutputStream

Normally whenever we write data to a file using FileOutputStream as:
fout.write(ch);
Here the FileOutputStream is invoked to write the characters into the file. Let us estimate the time it takes to read 100 characters from the keyboard and write all of them into a file.
  • Předpokládejme, že data jsou načtena z klávesnice do paměti pomocí DataInputStream a načtení 1 znaku do paměti trvá 1 sekundu a tento znak je do souboru zapsán pomocí FileOutputStream za další 1 sekundu.
  • Takže čtení a zápis souboru bude trvat 200 sekund. To je ztráta času. Na druhou stranu, pokud jsou použity Buffered classed, poskytují buffer, který je nejprve naplněn znaky z bufferu, které mohou být okamžitě zapsány do souboru. Třídy s vyrovnávací pamětí by se měly používat ve spojení s jinými třídami proudu.
  • First the DataInputStream reads data from the keyboard by spending 1 sec for each character. This character is written into the buffer. Thus to read 100 characters into a buffer it will take 100 second time. Now FileOutputStream will write the entire buffer in a single step. So reading and writing 100 characters took 101 sec only. In the same way reading classes are used for improving the speed of reading operation.  Attaching FileOutputStream to BufferedOutputStream as:
    BufferedOutputStream bout=new BufferedOutputStream(fout1024);
    Here the buffer size is declared as 1024 bytes. If the buffer size is not specified then a default size of 512 bytes is used
Důležité metody třídy BufferedOutputStream:
    void flush() : Vyprázdní tento výstupní proud ve vyrovnávací paměti. void write(byte[] b int off int len) : Zapíše bajty len ze zadaného pole bajtů počínaje offsetem do tohoto výstupního toku s vyrovnávací pamětí. void write(int b): Zapíše určený bajt do tohoto výstupního proudu s vyrovnávací pamětí.
výstup:
C:> javac Create_File.java C:> java Create_File Enter text (@ at the end): This is a program to create a file @ C:/> type file.txt This is a program to create a file 
Související články:
  • CharacterStream vs ByteStream
  • Třída souboru v Javě
  • Práce se soubory v Javě pomocí FileWriter a FileReader
Vytvořit kvíz