2017. 9. 28. 10:22ㆍlanguage/java
File to Binary String, Binary String to File
파일을 다른 곳으로 전송해 주어야 할 경우가 생겼다.
파일을 전송하는 방법에는 여러가지가 있다.
소켓을 사용하거나 http 통신을 사용하거나 ftp를 사용하거나 등등...
파일을 바이너리 형태로 만들어 보내고 사용자는 전달받은 바이너리 문자열을 다시 파일로 변환해야 한다.
필자는 http 통신을 사용하여 호출한 클라이언트에게 바이너리 문자열을 제공하고(Restful 방식으로 json 또는 text 방식으로 제공하였다. Spring messageConverters 를 사용함) 클라이언트는 전달받은 바이너리 문자열을 다시 파일로 만들어 사용할 수 있도록 제공했다.
Http 통신에 관련한 내용은 다음 포스팅을 참고하면 된다.
Java HttpUrlConnection 으로 통신하기 링크
본 포스팅과 위 링크의 포스팅을 같이 본다면 Http 통신을 활용하여 파일을 주고 받을 수 있다.
여러 라이브러리를 사용하여 더 편하게 만들 수 있지만 최소한의 라이브러리를 사용하여 기본에 충실하여 작업해 보았다.
이 포스팅은 실제로 전송하는 부분을 제외한 file을 binary 문자열로 변환하고 또 그 반대로 변환하는 방법에 대해 기술하였다.
필요한 라이브러리 : commons-codec-1.9.jar
|
파일객체를 바이너리 스트링으로 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 |
/**
* 파일을 바이너리 스트링으로 변경
*
* @param file
* @return
*/
public static String fileToBinary(File file) {
String out = new String();
FileInputStream fis = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
fis = new FileInputStream(file);
} catch (FileNotFoundException e) {
System.out.println("Exception position : FileUtil - fileToString(File file)");
}
int len = 0;
byte[] buf = new byte[1024];
try {
while ((len = fis.read(buf)) != -1) {
baos.write(buf, 0, len);
}
byte[] fileArray = baos.toByteArray();
out = new String(base64Enc(fileArray));
fis.close();
baos.close();
} catch (IOException e) {
System.out.println("Exception position : FileUtil - fileToString(File file)");
}
return out;
}
public static byte[] base64Enc(byte[] buffer) {
return Base64.encodeBase64(buffer);
} |
cs |
7# : 파일을 바이너리 스트링으로 변환하는 함수이다.
13# : 파일객체를 FileInputStream으로 생성한다.
21# ~ 23# : FileInputStream을 ByteArrayOutputStream에 쓴다.
25# : ByteArrayOutputStream 를 ByteArray 로 캐스팅한다.
26# : 캐스팅 된 ByteArray를 Base64 로 인코딩한 후 String 로 캐스팅한다.
바이너리 스트링을 파일로 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 |
/**
* 바이너리 스트링을 파일로 변환
*
* @param binaryFile
* @param filePath
* @param fileName
* @return
*/
public static File binaryToFile(String binaryFile, String filePath, String fileName) {
if ((binaryFile == null || "".equals(binaryFile)) || (filePath == null || "".equals(filePath))
|| (fileName == null || "".equals(fileName))) { return null; }
FileOutputStream fos = null;
File fileDir = new File(filePath);
if (!fileDir.exists()) {
fileDir.mkdirs();
}
File destFile = new File(filePath + fileName);
byte[] buff = binaryFile.getBytes();
String toStr = new String(buff);
byte[] b64dec = base64Dec(toStr);
try {
fos = new FileOutputStream(destFile);
fos.write(b64dec);
fos.close();
} catch (IOException e) {
System.out.println("Exception position : FileUtil - binaryToFile(String binaryFile, String filePath, String fileName)");
}
return destFile;
} |
cs |
8# : 바이너리 스트링을 파일로 변환하는 함수이다.
15# ~ 18# : 파일을 저장할 경로가 없으면 만들어 준다.
20# : 파일경로와 파일명을 합치고 파일 객체를 만든다.
22# ~ 24# : Base64로 인코딩된 바이너리 스트링을 Base64로 디코딩한 후 String 로 캐스팅한다.
26# ~ 32# : 바이너리 스트링을 생성한 파일객체에 써서 파일로 만든다.
끝
'language > java' 카테고리의 다른 글
java 비밀번호 정규식 (특수문자, 영문, 숫자) (0) | 2018.03.02 |
---|---|
java 날짜 체크하기 (0) | 2018.02.23 |
JAVA BigDecimal 사칙연산(더하기, 빼기, 나누기, 곱하기), 비교 compareTo, 소수점 처리 (올림, 버림, 반올림) (0) | 2017.11.16 |
Java bean to map, vo to map, 객체를 Map으로 변환 (5) | 2017.09.29 |
Java HttpUrlConnection 으로 통신하기 / 파일 전송 및 수신 (0) | 2017.09.28 |
JAVA List VO 정렬 Collections Sort Comparator 사용하기 (0) | 2017.09.04 |
java replace last 구현하기 (0) | 2017.02.08 |
Java | Byte 배열과 바이너리 String 문자열 간의 상호 변환 (0) | 2017.01.19 |
Java C Socket 통신, 파일전송 / C : Server / Java : Client (7) | 2017.01.18 |
JAVA 다중 for문 수행횟수에 따른 속도 차이 실험 (0) | 2017.01.04 |