Java/File Input Output/Buffer Stream

Материал из Java эксперт
Перейти к: навигация, поиск

Reading from a Binary File with BufferedInputStream

   <source lang="java">

import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.EOFException; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.text.NumberFormat; public class ReadBinaryFile {

 public static void main(String[] args) throws Exception{
   NumberFormat cf = NumberFormat.getCurrencyInstance();
   File file = new File("product.dat");
   DataInputStream  in = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
   boolean eof = false;
   while (!eof) {
     Product movie = readMovie(in);
     if (movie == null)
       eof = true;
     else {
       String msg = Integer.toString(movie.year);
       msg += ": " + movie.title;
       msg += " (" + cf.format(movie.price) + ")";
       System.out.println(msg);
     }
   }
   in.close();
 }
 private static Product readMovie(DataInputStream in) {
   String title = "";
   int year = 0;
   double price = 0.0;
   try {
     title = in.readUTF();
     year = in.readInt();
     price = in.readDouble();
   } catch (EOFException e) {
     return null;
   } catch (IOException e) {
     System.out.println("I/O Error");
     System.exit(0);
   }
   return new Product(title, year, price);
 }

} class Product {

 public String title;
 public int year;
 public double price;
 public Product(String title, int year, double price) {
   this.title = title;
   this.year = year;
   this.price = price;
 }

}

</source>
   
  
 
  



Use buffered input.

   <source lang="java">

import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.IOException; class BufferedInputStreamDemo {

 public static void main(String args[]) throws IOException {
   String s = "This is a © copyright symbol " + "but this is &copy not.\n";
   byte buf[] = s.getBytes();
   ByteArrayInputStream in = new ByteArrayInputStream(buf);
   BufferedInputStream f = new BufferedInputStream(in);
   int c;
   boolean marked = false;
   while ((c = f.read()) != -1) {
     switch (c) {
     case "&":
       if (!marked) {
         f.mark(32);
         marked = true;
       } else {
         marked = false;
       }
       break;
     case ";":
       if (marked) {
         marked = false;
         System.out.print("(c)");
       } else
         System.out.print((char) c);
       break;
     case " ":
       if (marked) {
         marked = false;
         f.reset();
         System.out.print("&");
       } else
         System.out.print((char) c);
       break;
     default:
       if (!marked)
         System.out.print((char) c);
       break;
     }
   }
 }

}

</source>
   
  
 
  



Use BufferedInputStream and BufferedOutputStream to copy byte array

   <source lang="java">

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; public class Main {

 public static void main(String[] args) throws Exception {
   String fromFileName = "from.txt";
   String toFileName = "to.txt";
   BufferedInputStream in = new BufferedInputStream(new FileInputStream(fromFileName));
   BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(toFileName));
   byte[] buff = new byte[32 * 1024];
   int len;
   while ((len = in.read(buff)) > 0)
     out.write(buff, 0, len);
   in.close();
   out.close();
 }

}

</source>
   
  
 
  



Writing to a Binary File

   <source lang="java">

import java.io.BufferedOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; public class WriteBinaryFile {

 public static void main(String[] args) throws Exception {
   Product[] movies = new Product[10];
   movies[0] = new Product("W", 1946, 14.95);
   movies[1] = new Product("T", 1965, 12.95);
   movies[2] = new Product("Y", 1974, 16.95);
   movies[3] = new Product("R", 1975, 11.95);
   movies[4] = new Product("S", 1977, 17.95);
   movies[5] = new Product("P", 1987, 16.95);
   movies[6] = new Product("G", 1989, 14.95);
   movies[7] = new Product("A", 1995, 19.95);
   movies[8] = new Product("Game", 1997, 14.95);
   movies[9] = new Product("F", 2001, 19.95);
   DataOutputStream out = openOutputStream("movies.dat");
   for (Product m : movies)
     writeMovie(m, out);
   out.close();
 }
 private static DataOutputStream openOutputStream(String name) throws Exception {
   DataOutputStream out = null;
   File file = new File(name);
   out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
   return out;
 }
 private static void writeMovie(Product m, DataOutputStream out) throws Exception {
   out.writeUTF(m.title);
   out.writeInt(m.year);
   out.writeDouble(m.price);
 }

} class Product {

 public String title;
 public int year;
 public double price;
 public Product(String title, int year, double price) {
   this.title = title;
   this.year = year;
   this.price = price;
 }

}

</source>