File/IO

GW·2023년 7월 27일

File/IO
file input/output

File Input:파일 읽기

  • File System에서 Java 로 Input

File Output:파일 쓰기

  • Java에서 File System 으로 Output
File Api

File file = new File("C:\\Java Exam","Java Exam.txt");
		//C:\\Java Exam","Java Exam.txt 이경로에 Java Exam.txt 이파일이 존재하면 true, 아니면 false
		System.out.println(file.exists());
		//C:\\Java Exam","Java Exam.txt 이경로에 Java Exam.txt 객체가 파일이면 true, 아니면 false
		System.out.println(file.isFile());
		//C:\\Java Exam","Java Exam.txt 이경로에 Java Exam.txt 객체가 폴더이면 true, 아니면 false
		System.out.println(file.isDirectory());
		//C:\\Java Exam","Java Exam.txt 이경로에 Java Exam.txt 이 객체의 절대경로
		System.out.println(file.getAbsolutePath());
		//C:\\Java Exam","Java Exam.txt 이경로에 Java Exam.txt 이 객체의 파일 명 혹은 폴더명
		System.out.println(file.getName());
		//크기(byte) 
		System.out.println(file.length());
		// 파일의 마지막 수정시간
		System.out.println(file.lastModified());
		//현재 경로의 상위 경로
		System.out.println(file.getParent());
		// 현재 경로가 폴더일 경우, 하위의 모든 파일과 폴더목록을 배열로 반환.
		System.out.println(file.listFiles());

재귀호출
자기가 자신을 부른다
단 끝점을 확실하게 해야한다.

파일쓰기


mkdir은 한번 호출할 때 하나의 폴더만 생성가능
그래서 호출을 하나씩 해줘야한다.

한번호출할 때 여러개의 폴더를 동시에 생성 가능
(실무에서는 mkdirs를 사용)

파일 만들기

package com.ktdsuniversity.edu.fileread;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;

public class WriteTextFile {

	public void makeDirectories(String path) {
		File dir = new File(path);
		if (!dir.exists()) {
			dir.mkdirs(); // makeDirectory
		}
	}

	public void makeAndWriteFile(String directoryStringPath, 
    							 String fileName, 
                                 List<String> fileDescription) {
                                 
		File file = new File(directoryStringPath, fileName);
		try {
			Files.write(file.toPath(), fileDescription);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		WriteTextFile wtf = new WriteTextFile();
		wtf.makeDirectories("C:\\java2\\file\\dir");

		List<String> fileDesc = new ArrayList<>();
		fileDesc.add("내용을 작성합니다.");
		wtf.makeAndWriteFile("C:\\java2\\file\\dir", "wrteTest.txt", fileDesc);

	}
}

똑같은 파일에 이름 바꿔주기?

package com.ktdsuniversity.edu.fileread;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;

public class WriteTextFile {
	public void makeDirectory(String path) {
		File dir =new File(path);
		if(!dir.exists()) {
			dir.mkdir(); //makeDirectory
		}
	}
	public void makeDirectories(String path) {
		File dir =new File(path);
		if(!dir.exists()) {
			dir.mkdirs(); //makeDirectory
		}	
	}
	
	public void makeAndWriteFile(String directoryStringPath,
								 String fileName, 
								 List<String> fileDescription) {
		File file = new File(directoryStringPath,fileName);
		// 파일을 생성할 폴더가 없다면 폴더를 생성해 준다.
		if(!file.getParentFile().exists()) {
			file.getParentFile().mkdirs();
		}
		//동일한 파일명이 없을 떄 까지 순번을 증가시켜주는 기능.
		//파일이 존재하지 않을 때 까지 반복.
		int index = 1;
		String newFileName=null;
		while(file.exists()) {
			//writeTest.txt ==> writeTest().txt
			//writeTest.txt ==>writeTest
			newFileName = fileName.substring(0,fileName.lastIndexOf("."));
			//writeTest -> writeTest(1)
			newFileName += "("+(index++)+ ")";
			//writeTest(1) -> writeTest(1).txt
			newFileName += fileName.substring(fileName.lastIndexOf("."));
			
			file = new File(directoryStringPath, newFileName);
		}
		
		try {
			Files.write(file.toPath(), fileDescription);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		WriteTextFile wtf = new WriteTextFile();
		wtf.makeDirectory("C:\\java"); 
		wtf.makeDirectory("C:\\java\\file"); 
		wtf.makeDirectory("C:\\java\\file\\dir"); 
		wtf.makeDirectories("C:\\java2\\file\\dir");
		
		
		List<String> fileDesc = new ArrayList<>();
		fileDesc.add("내용을 작성합니다.");
		wtf.makeAndWriteFile("C:\\java3\\file\\dir", "wrteTest.txt", fileDesc);
		
		
	}
}

파일삭제

excel파일 받아오기

package com.ktdsuniversity.edu.fileread;

import java.io.File;
import java.io.IOException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcel {
	public static void main(String[] args) {
		//Workbook <===Excel File
			//Sheet <=== Sheet
				//Row<List> <=== 1행, 2행
					//Cell<List> <== A열, B열
		File excelFile = new File("C:\\Java Exam", "exceltest.xlsx");
		Workbook readExcelWorkbook = null;
		try {
			readExcelWorkbook=new XSSFWorkbook(excelFile);
		} catch (InvalidFormatException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if(readExcelWorkbook!=null) {
			//Sheet
			//가장 첫번째 sheet를 가져옴
			Sheet sheet = readExcelWorkbook.getSheetAt(0);
			int rowCount = sheet.getLastRowNum();
			for(int i=0; i<=rowCount; i++) {
				Row row = sheet.getRow(i);
				
				// 행안에 데이터가 존재하는 마지막 열의 번호
				int cellCount=row.getLastCellNum();
				for(int j=0; j<cellCount; j++) {
					//열 
					Cell cell = row.getCell(j);
					
					//열에 존재하는 값을 출력.
					System.out.println(cell.getStringCellValue());
				}
			}
		}
		//파일 쓰기
		
		try {
			readExcelWorkbook.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

0개의 댓글