2014-12-18 2 views
0

У меня есть класс Java для чтения файла и установки некоторых данных в класс. У меня есть классНесколько операций с FileInputStream

FileMetadata.java

public class FileMetadata implements Serializable { 

    private String location; 
    private Double size; 
    private String content; 
    private List<String> lines; 
    private String md5Digest; 

    //parameterized constructor 
    //getters and setters 
} 

После прочтения файла, я хочу, чтобы установить значение в этом классе.

Это мой метод для чтения файла.

FileUtil.java

public static void readFile(File file) throws IOException { 
    FileInputStream fis = null; 
    List<String> fileLines = new ArrayList<String>(); 
    try { 
     fis = new FileInputStream(file); 
     StringBuilder sb = new StringBuilder(); 
     StringBuilder sbLine = new StringBuilder(); 
     int ch; 
     while ((ch = fis.read()) != -1) { 
      String line = "" + (char) ch; 
      sb.append(line); 
      if(line.matches("(\r|\n)")) { 
       fileLines.add(sbLine.toString()); 
       sbLine.setLength(0); 
      } else { 
       sbLine.append(line); 
      } 
     } 
     String md5 = DigestUtils.md5Hex(fis); 
     System.out.println(md5); 
     System.out.println(sb.toString()); 
     System.out.println(getFileSizeInKB(file)); 
     for(String str : fileLines) { 
      System.out.println(str); 
     } 
    } finally { 
     if (fis != null) { 
      fis.close(); 
     } 
    } 
} 

Но список не приходит должным образом, как это добавляет пустую строку после каждой строки, так как следующий файл строка «\ г \ п». Во второй раз он добавляет пустой StringBuilder, поэтому список получает дополнительную пустую строку после каждой строки. Я могу попробовать проверить его длину, прежде чем добавлять в список. Но если файл содержит пустую строку, я хочу добавить ее в список.

+0

Как правило, не рекомендуется повторно использовать потоки. Создайте новый поток ввода для новых операций. –

ответ

2

Вы можете попробовать использовать класс BufferedReader.

BufferedReader br = new BufferedReader(new FileReader(file)); 
String line; 
while ((line=br.readLine())!=null) { 
.............. 
} 
br.close(); 
FileInputStream fis = new FileInputStream(file); 
String md5 = DigestUtils.md5Hex(fis); 
fis.close(); 

(В примере нет обработки исключений).

+0

Но как насчет получения файла FileMD5? ему нужно InputStream – iCode

+0

Привет, вы можете создать еще один поток после прочтения файла. Я обновлю ответ. – richardtz

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