2017-02-24 4 views
1

2 개의 Java 클래스가 있습니다. 그들은 클래스 A클래스 B이되도록합시다.파일 내용을 바이트로 읽습니다. java

클래스 A는 사용자로부터 문자열 입력 를 가져와 파일로 바이트로하고 B 클래스 파일을 판독하고 바이트 문자열로 표시되어야 입력을 저장한다.

CLASS A는 : B 급에서

File file = new File("C:\\FILE.txt"); 

file.createNewFile(); 

FileOutputStream fos = new FileOutputStream(file); 
String fwrite = user_input_1+"\n"+user_input_2; 
fos.write(fwrite.getBytes()); 
fos.flush(); 
fos.close(); 

, 나는 파일을 읽을 수있는 코드를 작성,하지만 난 바이트로 파일의 내용을 읽을하는 방법을 모르겠어요.

의 클래스 B :

fr = new FileReader(file); 
br = new BufferedReader(fr); 
arr = new ArrayList<String>(); 
int i = 0; 

while((getF = br.readLine()) != null){ 
    arr.add(getF); 
} 
String[] sarr = (String[]) arr.toArray(new String[0]); 

이 file.txt를이 다음 줄이

가 이

[B는 36,245,605

내가 원하는 3ce76a1

[B의 @ @이 두 라인을 변환 할 수있다 을 각각의 문자열 값으로 변환 한 다음 표시 할 수 있습니다. 그것을하는 방법?

답변

1

데이터를 저장하려면 String byte[] 표현을 사용하여 저장해야합니까? 객체 직렬화 (Object Serialization Tutorial)를 살펴보면 로우 레벨의 라인을 읽거나 쓰는 방법에 대해 걱정할 필요가 없습니다. 당신이 FileOutputStream에 통해 바이트 배열을 작성하기 때문에

1

, 반대 작업이 FileInputStream에를 사용하여 파일을 읽고, 바이트 배열에서 문자열을 구성하는 것입니다 : 그러나

File file = new File("C:\\FILE.txt"); 
Long fileLength = file.length(); 
byte[] bytes = new byte[fileLength.intValue()] 
try (FileInputStream fis = new FileInputStream(file)) { 
    fis.read(bytes); 
} 
String result = new String(bytes); 

, 더 나은 방법이있다 문자열을 파일에 쓰는 것.

FileWriter를 사용하여 FileReader를 작성하고 (해당 BufferedReader/Writer로 파일을 래핑 할 수 있음) 중간 바이트 배열을 만들지 않아도됩니다. 또는 Apache Commons의 IOUtils 또는 Google의 Guava 라이브러리를 사용하는 것이 더 좋습니다.