2014-03-09 3 views
0

Я пытался прочитать из одного файла и записать байты, прочитанные в другой файл, используя классы, указанные в заголовке. Я успешно сделал это, но пока я пытался попробуйте разные вещи, я столкнулся с проблемой, которую я не понимаю.

Вот кодЧтение из одного файла с использованием FileInputStream и запись в другой файл с использованием FileOutputStream

import java.io.*; 
public class FileInputStreamDemo { 

    public static void main(String[] args) 
      throws Exception { 
     // TODO Auto-generated method stub 
     int size; 
     InputStream f = new 
       FileInputStream("G:/Eclipse Workspace/FileInputStream Demo/src/FileInputStreamDemo.java"); 

     System.out.println("Total available bytes: " + (size = f.available())); 
    /*int n=size/40; 
    System.out.println("first " + n + " bytes of file one read() at a time"); 

    for (int i=0;i<n;i++) 
    { 
     System.out.print((char) f.read()); 
    } 
    System.out.println("\n Still available: " + f.available()); 
    System.out.println("reading the next" + n + "with one read(b[])"); 
    byte b[] = new byte[n]; */ 
    /*for(int i=0;i<size;i++) 
    { 
     System.out.print((char) f.read()); 
    }*/ 
     OutputStream f1 = new 
       FileOutputStream("G:/Eclipse Workspace/FileInputStream Demo/test.txt"); 
     for (int count = 0; count < size; count++) { 
      f1.write(f.read()); 
     } 
     for (int i = 0; i < size; i++) { 
      System.out.print(f.read()); 
     } 

     f.close(); 
     f1.close(); 
    } 
} 

Проблема, что я говорю о том, что когда я впервые прочитал от FileInputStream объекта f т.е. f.read() и записать его на объект f1 т.е. FileOutputStream он продолжает делать то, что он , но когда я пытаюсь прочитать его снова, он возвращает -1. почему так ?

+0

нибудь, пожалуйста предложить правку .Я не может редактировать его правильно здесь на SO – user3085866

+0

-1 означает конец файла. Его конец файла, почему вы снова читаете его из файла FileInputStream во втором цикле. – Braj

+0

так что я должен делать, если я хочу прочитать его с самого начала? – user3085866

ответ

1

Используйте метод RandomAccessFile и seek(0), чтобы вернуться в начале.

RandomAccessFile file = new RandomAccessFile(new File("G:/Eclipse Workspace/FileInputStream Demo/src/FileInputStreamDemo.java"), "r"); 

Вот пример кода:

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.OutputStream; 
import java.io.RandomAccessFile; 

public class FileInputStreamDemo { 

    public static void main(String[] args) throws Exception { 
     long size; 
     File file = new File("D:/Workspace/JavaProject/src/com/test/FileInputStreamDemo.java"); 
     RandomAccessFile f = new RandomAccessFile(file, "r"); 

     System.out.println("Total available bytes: " + (size = file.length())); 
     OutputStream f1 = new FileOutputStream(new File(
       "D:/Workspace/JavaProject/resources/test.txt")); 
     for (int count = 0; count < size; count++) { 
      f1.write(f.read()); 
     } 
     f.seek(0); 
     for (int i = 0; i < size; i++) { 
      System.out.print((char)f.read()); 
     } 

     f.close(); 
     f1.close(); 
    } 
} 
+0

+1. Это единственное решение, предшествовавшее JDK 7, закрытие потока и открытие нового. Ну, это и с помощью 'FileChannel' ... – fge

Смежные вопросы