Vienna
깜짝과제1) 자바로 hmtl 파일 생성 본문
◇ 문제
그림에 보이는 웹브라우저 화면은 자바의 환경 정보를 html의 테이블 구조로 출력한 화면입니다. 아래 조건에 맞게 property.html 파일을 만드는 코드를 작성하세요.
[조건] 자바의 시스템 속성과 파일 저장 코드는 샘플 코드를 참조해 주세요. 출력결과의 파일은 웹브라우저로 확인해서 정상적으로 표시되어야 합니다. html파일을 작성할 때 테이블에 라인이 표시되도록 head 태그에 style태그 추가(샘플 코드 참조)



◆ 문제 해결
나는 아직 Java로 html 파일을 만드는 방법을 알지 못한다. 그래서 나는 구글링을 해보았다.
어떤 블로그 포스팅이 가장 이 문제를 해결하는 것이 적합할까, 찾아보던 중 다음과 같은 글을 발견했다.
자바로 html 파일 생성 및 수정
📖 index.html 파일 생성 new File 과 BufferedWriter, IOException을 이용하려면 상단 import java.io.* 필요 Run시켜보면 index.html 파일이 생성된 것을 확인할 수 있다. writer.write를 통해
velog.io
그래서 위에 나온대로 우선 코드를 따라 작성해보았다
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
File f = new File("index.html");
BufferedWriter bw = new BufferedWriter(new FileWriter(f));
bw.write("hello world");
bw.close();
}
}
FileWriter를 사용하기 위해서는 IOException을 무조건 catch 해야하는 것으로 보인다.
그리고 이 코드를 실행하자 아래와 같이 html 파일이 생성되었다.

작성하고 보니 예시에서 주어진 내용과 동일하다.
그럼 이에 맞추어 테이블을 출력하면 될 것으로 보인다.
블로그의 글을 보니 윈도우 환경에서는 맨 앞에 \r\n을 붙여주어야 줄바뀜이 되어 가독성을 증대시킬 수 있다고 적혀 있다.
그래서 별도의 함수를 새로 파서 작업해보았다.
import java.io.*;
public class Main {
private static BufferedWriter bw;
private static String head = "";
public static void main(String[] args) throws IOException {
File f = new File("index.html");
bw = new BufferedWriter(new FileWriter(f));
// head
write("<head>");
write("\t <meta charset=\"UTF-8\"/>");
write("\t <style>");
write("\t\t table {border-collapse:collapse; width: 100%;}");
write("\t\t th, td{border:solid 1px #000;}");
write("\t </style>");
write("</head>");
// body
write("<body>");
write("<h2>자바 환경정보</h2>");
write("<table>");
write("\t <thead>");
write("\t\t <tr align = \"center\" bgcolor=\"white\">");
write("\t\t\t <th>키</th><th>값</th>");
write("\t\t <tr>");
write("\t </thead>");
write("\t <tbody>");
for(Object k: System.getProperties().keySet()){
String key = k.toString();
String value = System.getProperty(key);
write("\t\t <tr><td>"+key+"</td><td>"+value+"</td>");
}
write("\t </tbody>");
write("</table>");
write("</body>");
// close
bw.close();
}
private static void write(String str) throws IOException {
bw.write(head+str);
if(head == ""){
head = "\r\n";
}
}
}
이 코드를 실행한 결과, 생성된 html의 코드는 다음과 같다.
<head>
<meta charset="UTF-8"/>
<style>
table {border-collapse:collapse; width: 100%;}
th, td{border:solid 1px #000;}
</style>
</head>
<body>
<h2>자바 환경정보</h2>
<table>
<thead>
<tr align = "center" bgcolor="white">
<th>키</th><th>값</th>
<tr>
</thead>
<tbody>
<tr><td>java.runtime.name</td><td>OpenJDK Runtime Environment</td>
<tr><td>sun.boot.library.path</td><td>C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\bin</td>
<tr><td>java.vm.version</td><td>25.372-b07</td>
<tr><td>java.vm.vendor</td><td>Amazon.com Inc.</td>
<tr><td>java.vendor.url</td><td>https://aws.amazon.com/corretto/</td>
<tr><td>path.separator</td><td>;</td>
<tr><td>java.vm.name</td><td>OpenJDK 64-Bit Server VM</td>
<tr><td>file.encoding.pkg</td><td>sun.io</td>
<tr><td>user.country</td><td>KR</td>
<tr><td>user.script</td><td></td>
<tr><td>sun.java.launcher</td><td>SUN_STANDARD</td>
<tr><td>sun.os.patch.level</td><td></td>
<tr><td>java.vm.specification.name</td><td>Java Virtual Machine Specification</td>
<tr><td>user.dir</td><td>D:\Study\Zero-Based\java\untitled</td>
<tr><td>java.runtime.version</td><td>1.8.0_372-b07</td>
<tr><td>java.awt.graphicsenv</td><td>sun.awt.Win32GraphicsEnvironment</td>
<tr><td>java.endorsed.dirs</td><td>C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\endorsed</td>
<tr><td>os.arch</td><td>amd64</td>
<tr><td>java.io.tmpdir</td><td>C:\Users\suaLee\AppData\Local\Temp\</td>
<tr><td>line.separator</td><td>
</td>
<tr><td>java.vm.specification.vendor</td><td>Oracle Corporation</td>
<tr><td>user.variant</td><td></td>
<tr><td>os.name</td><td>Windows 11</td>
<tr><td>sun.jnu.encoding</td><td>MS949</td>
<tr><td>java.library.path</td><td>C:\Users\suaLee\.jdks\corretto-1.8.0_372\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Bandizip\;D:\Git\cmd;C:\Program Files\dotnet\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\nodejs\;C:\Users\suaLee\AppData\Local\Microsoft\WindowsApps;C:\Users\suaLee\AppData\Local\GitHubDesktop\bin;C:\Users\suaLee\AppData\Roaming\npm;C:\Users\suaLee\AppData\Local\Programs\Microsoft VS Code\bin;.</td>
<tr><td>java.specification.name</td><td>Java Platform API Specification</td>
<tr><td>java.class.version</td><td>52.0</td>
<tr><td>sun.management.compiler</td><td>HotSpot 64-Bit Tiered Compilers</td>
<tr><td>os.version</td><td>10.0</td>
<tr><td>user.home</td><td>C:\Users\suaLee</td>
<tr><td>user.timezone</td><td></td>
<tr><td>java.awt.printerjob</td><td>sun.awt.windows.WPrinterJob</td>
<tr><td>file.encoding</td><td>UTF-8</td>
<tr><td>java.specification.version</td><td>1.8</td>
<tr><td>java.class.path</td><td>C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\charsets.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\ext\access-bridge-64.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\ext\cldrdata.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\ext\dnsns.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\ext\jaccess.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\ext\jfxrt.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\ext\localedata.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\ext\nashorn.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\ext\sunec.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\ext\sunjce_provider.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\ext\sunmscapi.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\ext\sunpkcs11.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\ext\zipfs.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\jce.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\jfr.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\jfxswt.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\jsse.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\management-agent.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\resources.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\rt.jar;D:\Study\Zero-Based\java\untitled\out\production\untitled;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1\lib\idea_rt.jar</td>
<tr><td>user.name</td><td>suaLee</td>
<tr><td>java.vm.specification.version</td><td>1.8</td>
<tr><td>sun.java.command</td><td>Main</td>
<tr><td>java.home</td><td>C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre</td>
<tr><td>sun.arch.data.model</td><td>64</td>
<tr><td>user.language</td><td>ko</td>
<tr><td>java.specification.vendor</td><td>Oracle Corporation</td>
<tr><td>awt.toolkit</td><td>sun.awt.windows.WToolkit</td>
<tr><td>java.vm.info</td><td>mixed mode</td>
<tr><td>java.version</td><td>1.8.0_372</td>
<tr><td>java.ext.dirs</td><td>C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext</td>
<tr><td>sun.boot.class.path</td><td>C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\resources.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\rt.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\sunrsasign.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\jsse.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\jce.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\charsets.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\lib\jfr.jar;C:\Users\suaLee\.jdks\corretto-1.8.0_372\jre\classes</td>
<tr><td>java.vendor</td><td>Amazon.com Inc.</td>
<tr><td>java.specification.maintenance.version</td><td>4</td>
<tr><td>file.separator</td><td>\</td>
<tr><td>java.vendor.url.bug</td><td>https://github.com/corretto/corretto-8/issues/</td>
<tr><td>sun.io.unicode.encoding</td><td>UnicodeLittle</td>
<tr><td>sun.cpu.endian</td><td>little</td>
<tr><td>sun.desktop</td><td>windows</td>
<tr><td>sun.cpu.isalist</td><td>amd64</td>
</tbody>
</table>
</body>

어떤 분이 StringBuilder를 활용하여 푸셨다하여 좋은 아이디어라고 생각했다.
그래서 나도 반영해보았다.
import java.io.*;
public class Main {
private static StringBuilder sb = new StringBuilder();
private static String head = "";
public static void main(String[] args) throws IOException {
// head
record("<head>");
record("\t <meta charset=\"UTF-8\"/>");
record("\t <style>");
record("\t\t table {border-collapse:collapse; width: 100%;}");
record("\t\t th, td{border:solid 1px #000;}");
record("\t </style>");
record("</head>");
// body
record("<body>");
record("<h2>자바 환경정보</h2>");
record("<table>");
record("\t <thead>");
record("\t\t <tr align = \"center\" bgcolor=\"white\">");
record("\t\t\t <th>키</th><th>값</th>");
record("\t\t <tr>");
record("\t </thead>");
record("\t <tbody>");
for(Object k: System.getProperties().keySet()){
String key = k.toString();
String value = System.getProperty(key);
record("\t\t <tr><td>"+key+"</td><td>"+value+"</td>");
}
record("\t </tbody>");
record("</table>");
record("</body>");
File f = new File("index.html");
BufferedWriter bw = new BufferedWriter(new FileWriter(f));
bw.write(sb.toString());
// close
bw.close();
}
private static void record(String str) throws IOException {
sb.append(head+str);
if(head == ""){
head = "\r\n";
}
}
}'그외' 카테고리의 다른 글
| 알고리즘 복습) 버블 정렬, 삽입 정렬, 선택 정렬 (1) | 2023.06.13 |
|---|---|
| 깜짝과제3) 웹페이지 페이징 처리 (0) | 2023.06.06 |
| 깜짝과제2) 거리가 가장 가까운 좌표값 찾는 프로그램 작성하기 (0) | 2023.06.06 |