Java에서 파일을 읽는 다양한 방법 1. 다양한 방법으로 파일 내용을 읽습니다.
1. 파일 내용을 바이트 단위로 읽습니다.
2. 문자별로 파일 내용 읽기
3. 파일 내용을 한 줄씩 읽습니다.
4. 파일 내용을 무작위로 읽습니다.
*/
import java.io.BufferedReader;
java.io.파일 가져오기;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader;
공개 클래스 ReadFromFile {
/**
* 파일을 바이트 단위로 읽습니다. 사진, 사운드, 이미지 등과 같은 바이너리 파일을 읽는 데 자주 사용됩니다.
* @param fileName 파일 이름
*/
공개 정적 무효 readFileByBytes(문자열 파일 이름){
파일 파일 = 새 파일(파일 이름);
입력스트림 = null;
노력하다 {
System.out.println("한 번에 한 바이트씩 파일 내용을 바이트 단위로 읽습니다.");
//한 번에 한 바이트씩 읽습니다.
in = new FileInputStream(파일);
int 임시바이트;
while((tempbyte=in.read()) != -1){
System.out.write(임시바이트);
}
넣다();
} 잡기(IOException e) {
e.printStackTrace();
반품;
}
노력하다 {
System.out.println("파일 내용을 바이트 단위로 한 번에 여러 바이트씩 읽습니다.");
//한 번에 여러 바이트를 읽습니다.
바이트[] tempbytes = 새 바이트[100];
int 바이트읽기 = 0;
in = new FileInputStream(파일이름);
ReadFromFile.showAvailableBytes(in);
//여러 바이트를 바이트 배열로 읽습니다. byteread는 한 번에 읽은 바이트 수입니다.
while ((byteread = in.read(tempbytes)) != -1){
System.out.write(tempbytes, 0, byteread);
}
} 잡기(예외 e1) {
e1.printStackTrace();
} 마지막으로 {
if (!= null){
노력하다 {
넣다();
} 잡기(IOException e1) {
}
}
}
}
/**
* 문자 단위로 파일을 읽습니다. 문자, 숫자, 기타 유형의 파일을 읽는 데 자주 사용됩니다.
* @param fileName 파일 이름
*/
공개 정적 무효 readFileByChars(문자열 파일 이름){
파일 파일 = 새 파일(파일 이름);
리더 리더 = null;
노력하다 {
System.out.println("한 번에 1바이트씩 문자 단위로 파일 내용을 읽습니다.");
//한 번에 한 문자씩 읽습니다.
reader = new InputStreamReader(new FileInputStream(파일));
int tempchar;
while ((tempchar = reader.read()) != -1){
//Windows의 경우 두 문자 rn이 함께 있으면 개행을 나타냅니다.
//그러나 이 두 문자가 별도로 표시되면 줄이 두 번 변경됩니다.
//따라서 쉴드 r 또는 쉴드 n입니다. 그렇지 않으면 빈 줄이 많이 생길 것입니다.
if (((char)tempchar) != 'r'){
System.out.print((char)tempchar);
}
}
reader.close();
} 잡기(예외 e) {
e.printStackTrace();
}
노력하다 {
System.out.println("문자 단위로 한 번에 여러 바이트씩 파일 내용을 읽습니다.");
//한 번에 여러 문자 읽기
char[] tempchars = 새로운 char[30];
int charread = 0;
reader = new InputStreamReader(new FileInputStream(파일이름));
//여러 문자를 문자 배열로 읽어옵니다. charread는 한 번에 읽는 문자 수입니다.
while ((charread = reader.read(tempchars))!=-1){
//마찬가지로 r이 표시되지 않도록 보호합니다.
if ((charread == tempchars.length)&&(tempchars[tempchars.length-1] != 'r')){
System.out.print(tempchars);
}또 다른{
for (int i=0; i<charread; i++){
if(tempchars[i] == 'r'){
계속하다;
}또 다른{
System.out.print(tempchars[i]);
}
}
}
}
} 잡기(예외 e1) {
e1.printStackTrace();
}마지막으로 {
if (리더 != null){
노력하다 {
reader.close();
} 잡기(IOException e1) {
}
}
}
}
/**
* 라인 단위로 파일을 읽습니다. 라인 기반 형식의 파일을 읽는 데 자주 사용됩니다.
* @param fileName 파일 이름
*/
공개 정적 무효 readFileByLines(문자열 파일 이름){
파일 파일 = 새 파일(파일 이름);
BufferedReader 리더 = null;
노력하다 {
System.out.println("파일 내용을 한 줄씩 읽어, 한 번에 한 줄씩 읽습니다:");
reader = new BufferedReader(new FileReader(파일));
문자열 임시 문자열 = null;
int 라인 = 1;
//파일의 끝이 null이 될 때까지 한 번에 한 줄씩 읽습니다.
while ((tempString = reader.readLine()) != null){
//줄 번호 표시
System.out.println("line " + line + ": " + tempString);
라인++;
}
reader.close();
} 잡기(IOException e) {
e.printStackTrace();
} 마지막으로 {
if (리더 != null){
노력하다 {
reader.close();
} 잡기(IOException e1) {
}
}
}
}
/**
* 무작위로 파일 내용 읽기
* @param fileName 파일 이름
*/
공개 정적 무효 readFileByRandomAccess(문자열 파일 이름){
RandomAccessFile 무작위파일 = null;
노력하다 {
System.out.println("무작위 파일 내용 읽기:");
// 읽기 전용 모드로 랜덤 액세스 파일 스트림을 엽니다.
randomFile = new RandomAccessFile(fileName, "r");
//파일 길이, 바이트 수
긴 fileLength = randomFile.length();
//파일의 시작 위치를 읽습니다.
int startIndex = (fileLength > 4) 4 : 0;
//읽은 파일의 시작 위치를 BeginIndex 위치로 이동합니다.
randomFile.seek(beginIndex);
바이트[] 바이트 = 새 바이트[10];
int 바이트읽기 = 0;
//한 번에 10바이트를 읽습니다. 파일 내용이 10바이트 미만인 경우 나머지 바이트를 읽습니다.
//한 번에 읽는 바이트 수를 byteread에 할당합니다.
while ((byteread = randomFile.read(bytes)) != -1){
System.out.write(bytes, 0, byteread);
}
} 잡기(IOException e){
e.printStackTrace();
} 마지막으로 {
if (randomFile != null){
노력하다 {
무작위파일.close();
} 잡기(IOException e1) {
}
}
}
}
/**
* 입력 스트림에 남은 바이트 수를 표시합니다.
* @param in
*/
개인 정적 무효 showAvailableBytes(InputStream in){
노력하다 {
System.out.println("현재 바이트 입력 스트림의 바이트 수:" + in.available());
} 잡기(IOException e) {
e.printStackTrace();
}
}
공개 정적 무효 메인(String[] args) {
문자열 파일명 = "C:/temp/newTemp.txt";
ReadFromFile.readFileByBytes(파일이름);
ReadFromFile.readFileByChars(파일이름);
ReadFromFile.readFileByLines(파일이름);
ReadFromFile.readFileByRandomAccess(파일이름);
}
}
2. 파일 끝에 내용을 추가합니다.
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* 파일 끝에 내용 추가
*/
공개 클래스 AppendToFile {
/**
*파일을 추가하는 방법: RandomAccessFile 사용
* @param fileName 파일 이름
* @param 콘텐츠 추가 콘텐츠
*/
공개 정적 무효 appendMethodA(문자열 파일 이름,
문자열 내용){
노력하다 {
// 읽기 및 쓰기 모드로 랜덤 액세스 파일 스트림을 엽니다.
RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
//파일 길이, 바이트 수
긴 fileLength = randomFile.length();
//쓰기 파일 포인터를 파일 끝으로 이동합니다.
randomFile.seek(fileLength);
randomFile.writeBytes(content);
무작위파일.close();
} 잡기(IOException e){
e.printStackTrace();
}
}
/**
* 파일을 추가하는 방법 B: FileWriter 사용
* @param 파일이름
* @param 콘텐츠
*/
public static void appendMethodB(String fileName, String content){
노력하다 {
//파일 작성기를 엽니다. 생성자의 두 번째 매개변수 true는 파일을 추가 형식으로 작성한다는 의미입니다.
FileWriter 작가 = new FileWriter(파일 이름, true);
작가.쓰기(내용);
작가.닫기();
} 잡기(IOException e) {
e.printStackTrace();
}
}
공개 정적 무효 메인(String[] args) {
문자열 파일명 = "C:/temp/newTemp.txt";
문자열 내용 = "새 추가!";
//방법 A에 따라 파일을 추가합니다.
AppendToFile.appendMethodA(파일 이름, 콘텐츠);
AppendToFile.appendMethodA(fileName, "append end.n");
//파일 내용 표시
ReadFromFile.readFileByLines(파일이름);
//방법 B에 따라 파일 추가
AppendToFile.appendMethodB(파일 이름, 콘텐츠);
AppendToFile.appendMethodB(fileName, "append end.n");
//파일 내용 표시
ReadFromFile.readFileByLines(파일이름);
}
}