JAVA I.O.(JAVA Input Output)
- Java에서는 System(STS) 외부의 data를 가져와서 다룰 수도 있음
- Stream : system 안과 밖으로 이동하는 Data의 흐름 또는 Data가 흐르는 통로
- Java.io package는 크게 InputStream 과 OutputStream이 있음
- 바이트 기반과 문자 기반으로 분류
JAVA I.O. | ||||
Byte Base | Character Base | |||
input | output | input | output | |
최상위 클래스 | InputStream | OutputStream | Reader | Writer |
하위 클래스 | FileInputStream BufferedInputStream DataInputStream |
FileOutputStream BufferedOutputStream DataOutputStream |
FileReader BufferedReader InputStreamReader |
FileWriter BufferedWriter OutputStreamWriter |
# 하위 클래스들은 각각 특화된 분야가 있어 최상위 클래스를 직접 사용 하는 경우는 드뭄
File 객체
- java에서 file/directory 등을 다룰 수 있게 해주는 객체(I.O에 해당하는 클래스는 아님)
- File에 Data를 읽고 쓰는 기능은 Stream을 통해 이루어
return | method | description |
boolean | createNewFile() | 새 파일 생성 |
boolean | mkdir() | 새 디렉토리 생성(folder) |
boolean | mkdirs() | 디렉토리 경로 생성 |
boolean | delete() | 파일 또는 디렉토리 삭제 |
boolean | isDirectory() | 디렉토리 여부 |
String | getName() | 이름을 가져옴 |
long | length() | 길이를 가져옴 |
- index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<style></style>
</head>
<body>
<form action="mkdirs" method="post">
특정 폴더 만들기 : <input type="text" name="path" value="C:/img/temp"/>
<button>생성</button>
</form>
<form action="createNewFile" method="post">
특정 파일 만들기 : <input type="text" name="path" value="C:/img/temp/test.txt"/>
<button>생성</button>
</form>
<form action="fileList" method="get">
파일 목록 보기 : <input type="text" name="path" value="C:/"/>
<button>생성</button>
</form>
</body>
<script>
var msg = "${msg}"
if(msg != ''){
alert(msg);
}
</script>
</html>
- FileController
package kr.co.web.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.co.web.model.FileModel;
@WebServlet(urlPatterns = {"/mkdirs","/createNewFile","/fileList"})
public class FileController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
dual(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
dual(req, resp);
}
private void dual(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
FileModel model = new FileModel(req,resp);
String uri = req.getRequestURI();
String ctx = req.getContextPath();
String addr = uri.substring(ctx.length());
String path = req.getParameter("path");
switch (addr) {
case "/mkdirs":
//System.out.println("폴더 생성 요청 : " + path);
model.makeFolder(path);
break;
case "/createNewFile":
model.makeFile(path);
break;
case "/fileList":
model.fileList(path);
break;
}
}
}
- FileModel
package kr.co.web.model;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FileModel {
HttpServletRequest req;
HttpServletResponse resp;
RequestDispatcher dis;
public FileModel(HttpServletRequest req, HttpServletResponse resp) {
this.req = req;
this.resp = resp;
}
public void makeFolder(String path) throws ServletException, IOException {
//java에서 File이나 Folder를 다룰 땐 File객체가 필요함
//File객체를 객체화할 때는 경로를 지정해주어야함
File folder = new File(path);
String msg = "이미 존재하는 폴더입니다.";
if(!folder.exists()) {
folder.mkdirs();
msg = "폴더가 생성되었습니다.";
}
req.setAttribute("msg", msg);
dis = req.getRequestDispatcher("index.jsp");
dis.forward(req, resp);
}
public void makeFile(String path) throws IOException, ServletException {
File file = new File(path);
String msg = "이미 존재하는 파일입니다.";
if(!file.exists()) {
file.createNewFile();
msg = "파일이 생성되었습니다.";
}
req.setAttribute("msg", msg);
dis = req.getRequestDispatcher("index.jsp");
dis.forward(req, resp);
}
public void fileList(String path) throws ServletException, IOException {
File dir = new File(path);
File[] files = dir.listFiles();
HashMap<String, Object> map = null;
List<HashMap<String, Object>> list = new ArrayList<HashMap<String,Object>>();
for(File file : files) {
map = new HashMap<String, Object>();
map.put("dir", file.isDirectory());
map.put("name", file.getName());
map.put("size", file.length());
list.add(map);
}
req.setAttribute("path", path);
req.setAttribute("files", list);
dis = req.getRequestDispatcher("result.jsp");
dis.forward(req, resp);
}
}
# java에서 File이나 Folder를 다룰 땐 File객체가 필요함
# File객체를 객체화할 때는 경로를 지정해주어야함
- result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<style>
table, th, td{
border: 1px solid black;
border-collapse: collapse;
padding: 5px 10px;
text-align: center;
}
</style>
</head>
<body>
<h3>확인 경로 : ${path}</h3>
<table>
<tr>
<th>이름</th>
<th>크기(byte)</th>
</tr>
<c:forEach items="${files}" var="file">
<tr>
<td>
<c:if test="${file.dir}">
<a href="fileList?path=${path}/${file.name}">${file.name}</a>
</c:if>
<c:if test="${!file.dir}">${file.name}</c:if>
</td>
<td>${file.size}</td>
</tr>
</c:forEach>
</table>
</body>
<script></script>
</html>
'코딩도전기 > I.O.' 카테고리의 다른 글
CODO Day29_JAVA_NIO(New Input / Output) (0) | 2023.03.14 |
---|---|
CODO Day28_JAVA_I.O(SubStream) (0) | 2023.03.13 |
CODO Day27_JAVA_I.O(Stream/Upload) (0) | 2023.03.10 |