너굴 개발 일지

TIL_210319_메서드, 배열, File클래스, FileWriter 클래스, Bufferded.. 클래스 본문

Java

TIL_210319_메서드, 배열, File클래스, FileWriter 클래스, Bufferded.. 클래스

너굴냥 2021. 3. 19. 21:29

< 오전 수업>

  • 메서드란? 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것, 반환되는 데이터는 반드시 하나!
    ex) 변수 1개, 객체 1개 배열 1개 등.. 

  • 만약 여러 개의 데이터 반환해야 할 경우 ?
    1) 모든 데이터 타입 같을 경우 : 배열 ArrayList 주로 사용
    2) 모든 데이터 타입 다를 경우 : 해당 데이터 저장하는 클래스 선언 후 객체에 저장하여 반환 
public class memo {
	
	public static void main(String[] args) {
		
		All all = new All("Java", 3, true);
		System.out.println(all.s + "," +  all.n + "," + all.b);
		
		All all2 = All.test("python", 1, true);
		System.out.println(all2.s + "," +  all2.n + "," + all2.b);
		
	}
}

class All {
	String s;
	int n;
	boolean b;
	
	All() {}
	
	// 1. 생성자로 반환하기
	All(String s, int n, boolean b) {
		this.s = s;
		this.n = n;
		this.b = b;
	}
	
	// 2. 메서드로 반환하기 
	public static All test(String s,int n, boolean b) {
		All all = new All();
		all.s = s;
		all.n = n;
		all.b = b;
		return all;
	}
	
	
}

 

  • 배열 선언 : 배열 타입[] 변수명;

  • 배열 생성 : 변수명 = new 타입 [길이]; (배열 길이 수정 절대 X)

  • 배열 선언, 생성 동시에 하는 법 : 타입[] 변수명 = new 타입[길이];

  • 배열 초기화 : 생성과 동시에 자동적으로 기본값으로 초기화된다.

     ex ) int[] score = new int[3]; // int형 배열 생성
             score[0] = 10;           // 각 요소에 직접 값 저장 
             score[1] = 20;
             score[2] = 30; 

  • 배열 생성, 초기화 동시에 하기
    • int[] score = new int[] { 10, 20, 30 };
    • 하지만 선언 생성 따로 하였다면 생략 X

      ex) int[] score;
           score = { 10, 20, 30 }; // (X)  
           score = new int[] {10, 20, 30 }; // (0)

< 오후 수업>

  • File Class : 파일 정보 다루는 클래스로 인스턴스 생성 후 사용, 매개변수로 경로 혹은 파일명 (java.io 패키지)

  • FileWriter Class : 원하는 파일을 생성시켜주는 클래스 (java.io 패키지)

  • BufferedWriter Class : 해당 파일에 원하는 내용 직접 쓰고 저장해주는 클래스

    <File 클래스 사용법>
    - File file = new File("경로");
    - File file = new File("경로/파일명");

    <FileWriter 클래스, BufferedWriter 클래스 사용법>
    1. String uri = "c:/filetest/test.txt";                    (파일 경로 변수 생성)
       FileWriter fw = new FileWriter(uri);                (없는 파일은 생성/ 존재파일은 열고 대기)
    2. BufferedWriter bw = new BufferedWriter(fw);  (매개변수로 FileWriter 인스턴스 대입)
    3. String word = "Hello World!";
    4. bw.write(word);                                        (해당 파일에 원하는 내용이 작성된다)
    5. bw.close();                                              (해당 파일이 저장된다)
       (굳이 닫지 않아도 이클립스 내부에선 실행되나 나중에 클라이언트에게 배포하게 되면 하나의 서버를 동시에 
        공유하기 때문에 사용하고 끝나면 꼭 닫아줘야한다. 안그러면 서버 과부하 걸리게 된다.)

  • 외부 자원을 사용할 경우, 반드시 예외처리 해야한다 !!! 
    (예외처리 혹은 예외선언, 선언은 라이브러리 개발자들 많이 사용)

  • 따라서 FileWriter 클래스 혹은 FileReader 클래스 이용시 예외처리 해야함 (외부의 파일을 이용하기에)

  • static member(정적 멤버) : 클래스당 하나씩 생성되고 결과적으론 멤버는 객체 내부가 아닌 별도의
    공간에서
    생성되어 메모리 형태로 관리된다. 그래서 클래스 멤버라고도 부른다.
    클래스가 로딩되는 순간에 멤버가 생성되고, 객체를 생성하기도 전부터 이미 메모리상에 존재하게 되며
    객체가 사라져도 해당 멤버는 사라지지 않고, 모든 동일 클래스의 객체 사이에서 공유된다. 
    이런 특징 때문에 기본적으로 정적 메서드에서는 오직 정적 멤버만 접근 가능하다.

File 클래스 메서드 메서드 기능
boolean exist() 파일 존재 여부 알려준다
booelan canWrite() 파일 수정 여부 알려준다
booelan canRead() 파일의 읽기 가능 여부 알려준다
(boolean) isFile() / isDirectory() 파일인지/ 폴더인지 알려준다
long lastModified() 파일 최종 수정 날짜 반환한다
(1970.01.01 00:00 기준으로 현재까지의 시간을 정수로 표현)
String getName() 파일 이름 반환한다
String getPath() 파일 경로 반환한다
String getAbsolutePath() 파일 절대경로 반환한다 
(절대경로이기에 드라이브명으로 시작한다 : c:/ ~~ )

 

- 파일 정보 알려주는 FileInfoClass

package com.bjy;

import java.io.File;
import java.util.Date;

public class FileInfoClass {
	
	
	public FileInfoClass() {}
	
	public static void fileInfo() {
		// 파일주소 uri
		String uri = "c:/filetest/log.txt";
		
		File file = new File(uri);
		System.out.println("파일 이름 : " + file.getName());
		System.out.println("파일 경로 : " + file.getPath());
		System.out.println("파일 절대 경로 : " + file.getAbsolutePath());
	
		boolean b;
		b = file.exists();
		System.out.println("파일 존재 : " + b);
		System.out.println(file.exists() ? "파일존재" : "파일 없음");
		
		b = file.canWrite();
		System.out.println("파일 쓰기(수정) 여부 : " + b);
		
		b = file.canRead();
		System.out.println("파일 읽기 여부 : " + b);
		
		b = file.isDirectory();
		System.out.println("폴더인지 여부 : " + b);
		
		b = file.isFile();
		System.out.println("파일인지 여부 : " + b);
		
		long n;
		n = file.lastModified();
		System.out.println("파일 최종 수정 날짜를 정수로 : " + n);
		// 1970.01.01 00:00 기준으로 현재까지의 시간을 정수로 표현 
		/* 정수로 반환된 날짜를 실세계 날짜로 */
		Date date = new Date(n);
		System.out.println("정수 -> 날짜 : " + date);
		
		n = file.length();
		System.out.println("파일 크기 : " + n);
		
		// file.delete(); => 실행하면 실제로 파일이 지워짐
	
	} // end of fileInfo() 
	
	
}

- Main클래스에서 FileInfoClass 실행시 

package com.bjy;

import java.io.IOException;

public class MainClass {

	public static void main(String[] args) {
		FileInfoClass.fileInfo();
//		FileDirClass.fileAndFolder();
//		
//		FileWriterClass.fileWrite();
//		FileReaderClass.fileRead();
	}
}

<FileInfoClass 실행 결과>

 

 

- 특정 파일의 내용을 읽어주는 FileReaderClass 생성

package com.bjy;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileReaderClass {
	
	public FileReaderClass() {}
	
	public static void fileRead() {
		String uri = "C:\\Users\\LG-PC\\eclipse-workspace\\flie_read_write\\src\\com\\bjy\\FileReaderClass.java";
        // 이클립스의 FileReaderClass 파일 
		
		try {
			FileReader fr = new FileReader(uri);
			BufferedReader br = new BufferedReader(fr);
			String text = "";
			
			
			text = br.readLine(); // 한줄씩 읽어주기 (더이상 없으면 null)
			System.out.println(text);
			
			// while문 사용하여 한문장씩 끝까지 읽어주기 
			while((text = br.readLine()) != null) {
				System.out.println(text);
			}
			
			
		}catch (IOException e) {
			System.out.println(e.getMessage());
		}
	} // end of fileRead()

}

- Main 클래스에서 FileReaderClass 클래스 사용시
  (Main 클래스에서 FileInfoClass 사용할 때와 비슷한 코드이므로 해당 코드는 생략했다)

<MainClass 클래스에서 FileReaderClass 클래스 실행시 출력된 내용이다.>

 

- 파일 경로 관련 FileDirClass 클래스 생성

package com.bjy;

import java.io.File;

public class FileDirClass {

	public FileDirClass() {}
	
	public static void fileAndFolder() {
		String uri = "C:\\Users\\LG-PC\\eclipse-workspace";
		
		File file = new File(uri);
		String[] list = file.list();
		// 객체가 아닌 파일명, 폴더명만 가지는 배열 
		
		
		for(String name : list) {
        // list 배열의 각 요소의 변수명을 name으로 정한 후 각 요소들을 하나씩 꺼낸다
        
			File f = new File(uri + "/" + name);
            // File f = new File("경로/파일명"); 사용함 
			if(f.isDirectory()) {
				System.out.println(name + " => 폴더");
			}else {
				System.out.println(name + " => 파일");
			}
		}
		
	} // end of fileAndFolder()
		
		
}

- FileDirClass 클래스를 MainClass 클래스에서 실행시

<c드라이브의 eclipse 폴더에 있는 모든 자료들을 폴더/파일인지 구별함>

 

 

- 파일 생성 후 원하는 내용을 작성해주는 FileWriterClass 작성

package com.bjy;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class FileWriterClass {
	
	public FileWriterClass() {}
	
	public static void fileWrite() {
		String uri = "c:/filetest/test.html";
		
		// 외부자원을 사용하기에 당연히 예외처리함 
		try {
			FileWriter fw = new FileWriter(uri);
			BufferedWriter bw = new BufferedWriter(fw);
			
			// html 사용
			String source = "<html>\n";
			source += "<body>\n";
			source += " 자수성가한 너굴이\n";
			source += " <br/>";
			source += " <a href=http://www.naver.com> 네이버로 이동 </a>";
			source += " <br/>";
			source += " <input type=id /> \n";
			source += " <br/>";
			source += " <input type=password /> \n";
			source += " <br/>";
			source += " <input type=button value=버튼 /> \n";
			source += "</body>\n";
			source += "</html>\n";
			
			
			bw.write(source);
			bw.close();
			fw.close();
		
		} catch (IOException e) {
			System.out.println(e.getMessage());
			//e.printStackTrace();
		}
	
	} // end of fileWriter()
}

- MainClass에서 FileWriterClass 실행시

<c드라이브의 filetest 폴더에 test.html 파일 생성됨>

 

<test.html 파일 실행시 원하는 문장과 기능이 구현된 걸 볼 수 있다.>

 

 

 


 

 

 

 

- 하나의 신문사 관련 정보를 담는 NewsClass

package com.bjy;

/** 하나의 신문사 관련 정보를 담는 클래스 **/
public class NewsClass {
	 String press="";		// 신문사 이름
	 String img="";			// 대표이미지
	 String url="";			// URL 
	 String category=""; 	// 종류

	public NewsClass() {	 //  기본생성자
	} // 기본 생성자 END

	/** 외부로부터 전달받은 데이터를 멤버(인스턴스) 변수에 대입하는 생성자 **/
	public NewsClass(String press, String img, String url, String category) {
		this.press=press;
		this.img=img;
		this.url=url;
		this.category=category;
	}  // Overloading 생성자 END

	
} // class END

 

- 전체 News 데이터 보유하는 DataClass

 

package com.bjy;

import java.util.ArrayList;

/** 전체 News 데이터 보유 하는 클래스 **/
public class DataClass {
	
	/* 전체 News 데이터 보유 하는 ArrayList 
	 * 하나의 객체만 사용할 수 있도록 미리 디자인 해놓은 패턴 중 하나인 Singletone 패턴*/
	ArrayList<NewsClass> news=new ArrayList<NewsClass>();
	
	public DataClass() {  // 기본 생성자
	} // 생성자 END
	
	
	/** news(ArrayList<NewsClass>)에  초기 데이터 삽입하는 메서드 **/
	public void initInsertNewsData() {
		news.add(new NewsClass("경향신문", "nsd16500796.gif", "newsstand.naver.com/032",  "종합지"));
		news.add(new NewsClass("국민일보", "nsd113224489.gif", "newsstand.naver.com/005",  "종합지"));
		news.add(new NewsClass("동아일보", "nsd162737318.gif", "newsstand.naver.com/020",  "종합지"));
		news.add(new NewsClass("서울신문", "nsd165611664.gif", "newsstand.naver.com/081",  "종합지"));
		news.add(new NewsClass("석간내일신문", "nsd162522149.gif", "newsstand.naver.com/086",  "종합지"));
		news.add(new NewsClass("석간문화일보", "nsd11502601.gif", "newsstand.naver.com/021",  "종합지"));
		news.add(new NewsClass("세계일보", "nsd104440320.gif", "newsstand.naver.com/022",  "종합지"));
		news.add(new NewsClass("조선일보", "nsd14948476.gif", "newsstand.naver.com/023",  "종합지"));
		news.add(new NewsClass("중앙일보", "nsd111948440.gif", "newsstand.naver.com/025",  "종합지"));
		news.add(new NewsClass("한겨례", "nsd185116392.gif", "newsstand.naver.com/028",  "종합지"));
		news.add(new NewsClass("한국일보", "nsd141114194.gif", "newsstand.naver.com/038",  "종합지"));
		news.add(new NewsClass("NEWis", "nsd165223437.gif", "newsstand.naver.com/003",  "방송통신"));
		news.add(new NewsClass("jijicom", "nsd112912516.gif", "newsstand.naver.com/376",  "방송통신"));
		news.add(new NewsClass("한국경제", "nsd10118864.gif", "newsstand.naver.com/215",  "방송통신"));
		news.add(new NewsClass("KBS", "nsd164033826.gif", "newsstand.naver.com/056",  "방송통신"));
		news.add(new NewsClass("MBC", "nsd1453778.gif", "newsstand.naver.com/214",  "방송통신"));
		news.add(new NewsClass("MBN", "nsd163758547.gif", "newsstand.naver.com/057",  "방송통신"));
		news.add(new NewsClass("SBS", "nsd183257911.gif", "newsstand.naver.com/055",  "방송통신"));
		news.add(new NewsClass("YTN", "nsd17425192.gif", "newsstand.naver.com/052",  "방송통신"));
		news.add(new NewsClass("매일경제", "nsd113526120.gif", "newsstand.naver.com/009",  "경제지"));
		news.add(new NewsClass("머니투데이", "nsd113754824.gif", "newsstand.naver.com/008",  "경제지"));
		news.add(new NewsClass("서울경제", "nsd15338959.gif", "newsstand.naver.com/011",  "경제지"));
		news.add(new NewsClass("아시아경제", "nsd165753754.gif", "newsstand.naver.com/277",  "경제지"));
		news.add(new NewsClass("이데일리", "nsd111247840.gif", "newsstand.naver.com/018",  "경제지"));
		news.add(new NewsClass("ChosunBiz", "nsd19334215.gif", "newsstand.naver.com/366",  "경제지"));
		news.add(new NewsClass("파이낸셜뉴스", "nsd141641302.gif", "newsstand.naver.com/014",  "경제지"));
		news.add(new NewsClass("한국경제", "nsd162034351.gif", "newsstand.naver.com/015",  "경제지"));
		news.add(new NewsClass("해럴드경제", "nsd182749494.gif", "newsstand.naver.com/016",  "경제지"));
		news.add(new NewsClass("노컷뉴스", "nsd101424267.gif", "newsstand.naver.com/079",  "인터넷"));
		news.add(new NewsClass("NEWDAILY", "nsd102245777.gif", "newsstand.naver.com/327",  "인터넷"));
		news.add(new NewsClass("데일리안", "nsd184410246.gif", "newsstand.naver.com/368",  "인터넷"));
		news.add(new NewsClass("미디어오늘", "nsd124110953.gif", "newsstand.naver.com/006",  "인터넷"));
		news.add(new NewsClass("OhmyNews", "nsd102039590.gif", "newsstand.naver.com/047",  "인터넷"));
		news.add(new NewsClass("PRESSian", "nsd184630885.gif", "newsstand.naver.com/002",  "인터넷"));
		news.add(new NewsClass("디지털타임스", "nsd144911195.gif", "newsstand.naver.com/029",  "IT영자지"));
		news.add(new NewsClass("블로터닷넷", "nsd16353971.gif", "newsstand.naver.com/293",  "IT영자지"));
		news.add(new NewsClass("아이뉴스24", "nsd113110902.gif", "newsstand.naver.com/031",  "IT영자지"));
		news.add(new NewsClass("월스트리트저널", "nsd16110689.gif", "newsstand.naver.com/372",  "IT영자지"));
		news.add(new NewsClass("전자신문", "nsd11405830.gif", "newsstand.naver.com/030",  "IT영자지"));
		news.add(new NewsClass("JOONGANG DAILY", "nsd113635939.gif", "newsstand.naver.com/330",  "IT영자지"));
		news.add(new NewsClass("Net Korea", "nsd18341092.gif", "newsstand.naver.com/092",  "IT영자지"));
		news.add(new NewsClass("THE KOREA TIMES", "nsd92244365.gif", "newsstand.naver.com/040",  "IT영자지"));
		news.add(new NewsClass("The Korea Herald", "nsd183039979.gif", "newsstand.naver.com/044",  "IT영자지"));
		news.add(new NewsClass("KBS WORLD", "nsd14465916.gif", "newsstand.naver.com/326",  "IT영자지"));
		news.add(new NewsClass("마이데일리", "nsd113852954.gif", "newsstand.naver.com/117",  "스포츠연예"));
		news.add(new NewsClass("스포츠동아", "nsd16247594.gif", "newsstand.naver.com/314",  "스포츠연예"));
		news.add(new NewsClass("스포츠서울", "nsd184854466.gif", "newsstand.naver.com/073",  "스포츠연예"));
		news.add(new NewsClass("스포츠조선", "nsd184717404.gif", "newsstand.naver.com/076",  "스포츠연예"));
		news.add(new NewsClass("sportalkorea", "nsd16579942.gif", "newsstand.naver.com/139",  "스포츠연예"));
		news.add(new NewsClass("일간스포츠", "nsd113052387.gif", "newsstand.naver.com/241",  "스포츠연예"));
		news.add(new NewsClass("OSEN", "nsd102852391.gif", "newsstand.naver.com/109",  "스포츠연예"));
		news.add(new NewsClass("GameMeca", "nsd183724.gif", "newsstand.naver.com/356",  "매거진전문지"));
		news.add(new NewsClass("과학동아", "nsd165049622.gif", "newsstand.naver.com/363",  "매거진전문지"));
		news.add(new NewsClass("jungle", "nsd165310840.gif", "newsstand.naver.com/345",  "매거진전문지"));
		news.add(new NewsClass("Software", "nsd113744707.gif", "newsstand.naver.com/357",  "매거진전문지"));
		news.add(new NewsClass("법률신문", "nsd165524289.gif", "newsstand.naver.com/122",  "매거진전문지"));
		news.add(new NewsClass("ScienceTimes", "nsd113446808.gif", "newsstand.naver.com/355",  "매거진전문지"));
		news.add(new NewsClass("소년한국일보", "nsd102746161.gif", "newsstand.naver.com/329",  "매거진전문지"));
		news.add(new NewsClass("STYLECOM", "nsd18366175.gif", "newsstand.naver.com/367",  "매거진전문지"));
		news.add(new NewsClass("시사IN Live", "nsd182936757.gif", "newsstand.naver.com/308",  "매거진전문지"));
		news.add(new NewsClass("씨네21", "nsd185025147.gif", "newsstand.naver.com/140",  "매거진전문지"));
		news.add(new NewsClass("Ablenews", "nsd184148949.gif", "newsstand.naver.com/328",  "매거진전문지"));
		news.add(new NewsClass("ELLE", "nsd16411268.gif", "newsstand.naver.com/354",  "매거진전문지"));
		news.add(new NewsClass("여성신문", "nsd164815489.gif", "newsstand.naver.com/310",  "매거진전문지"));
		news.add(new NewsClass("CARLIFE", "nsd135857948.gif", "newsstand.naver.com/362",  "매거진전문지"));
		news.add(new NewsClass("조세신문", "nsd101830214.gif", "newsstand.naver.com/123",  "매거진전문지"));
		news.add(new NewsClass("채널예스", "nsd14034411.gif", "newsstand.naver.com/361",  "매거진전문지"));
		news.add(new NewsClass("코메디닷컴", "nsd14156354.gif", "newsstand.naver.com/296",  "매거진전문지"));
		news.add(new NewsClass("한경BUSINESS", "nsd114627265.gif", "newsstand.naver.com/050",  "매거진전문지"));
		news.add(new NewsClass("한국대학신문", "nsd18493839.gif", "newsstand.naver.com/384",  "매거진전문지"));
		news.add(new NewsClass("헬스조선", "nsd17329660.gif", "newsstand.naver.com/346",  "매거진전문지"));
		news.add(new NewsClass("EBS", "nsd145514832.gif", "newsstand.naver.com/344",  "매거진전문지"));
		news.add(new NewsClass("PC사랑", "nsd15129878.gif", "newsstand.naver.com/364",  "매거진전문지"));
		news.add(new NewsClass("강원도민일보", "nsd16493440.gif", "newsstand.naver.com/335",  "지역지"));
		news.add(new NewsClass("강원일보", "nsd18354817.gif", "newsstand.naver.com/087",  "지역지"));
		news.add(new NewsClass("경기일보", "nsd142922938.gif", "newsstand.naver.com/339",  "지역지"));
		news.add(new NewsClass("경남일보", "nsd11120405.gif", "newsstand.naver.com/333",  "지역지"));
		news.add(new NewsClass("경북일보", "nsd103125356.gif", "newsstand.naver.com/337",  "지역지"));
		news.add(new NewsClass("경인일보", "nsd75053515.gif", "newsstand.naver.com/338",  "지역지"));
		news.add(new NewsClass("광주일보", "nsd113635473.gif", "newsstand.naver.com/083",  "지역지"));
		news.add(new NewsClass("국제신문", "nsd11332053.gif", "newsstand.naver.com/332",  "지역지"));
		news.add(new NewsClass("대전일보", "nsd11342450.gif", "newsstand.naver.com/089",  "지역지"));
		news.add(new NewsClass("매일신문", "nsd184317799.gif", "newsstand.naver.com/088",  "지역지"));
		news.add(new NewsClass("부산일보", "nsd8215253.gif", "newsstand.naver.com/082",  "지역지"));
		news.add(new NewsClass("영남일보", "nsd165845221.gif", "newsstand.naver.com/385",  "지역지"));
		news.add(new NewsClass("울산메일", "nsd14643703.gif", "newsstand.naver.com/386",  "지역지"));
		news.add(new NewsClass("인천일보", "nsd14814726.gif", "newsstand.naver.com/387",  "지역지"));
		news.add(new NewsClass("전남일보", "nsd14941869.gif", "newsstand.naver.com/388",  "지역지"));
		news.add(new NewsClass("전북일보", "nsd183759971.gif", "newsstand.naver.com/336",  "지역지"));
		news.add(new NewsClass("제주도민일보", "nsd19513821.gif", "newsstand.naver.com/389",  "지역지"));
		news.add(new NewsClass("제주의소리", "nsd115524760.gif", "newsstand.naver.com/334",  "지역지"));
		news.add(new NewsClass("중도일보", "nsd17122649.gif", "newsstand.naver.com/390",  "지역지"));
		news.add(new NewsClass("충청일보", "nsd162144955.gif", "newsstand.naver.com/391",  "지역지"));
		news.add(new NewsClass("충청투데이", "nsd14118621.gif", "newsstand.naver.com/331",  "지역지"));
		news.add(new NewsClass("OBS", "nsd101932455.gif", "newsstand.naver.com/340",  "지역지"));

	} // initInsertNewsData() END

} // class END

 

- News 데이터를 보유하는 Data 클래스를 이용하여 html 파일을 생성하는 MethodClass

 

package com.bjy;

import java.io.FileWriter;
import java.io.IOException;

public class MethodClass {
	// 전체 news 데이터 보유 객체 선언
	private static DataClass newsData = null;
	
	public MethodClass() {}
	
	// 전체 news 데이터 보유 객체 생성 메서드
	public static void createNewsObject() {
		newsData = new DataClass();
		
	}
	
	// FileWriter 클래스 이용한 html 파일 생성 메서드 
	public static void createHTML() {
		createNewsObject();
		newsData.initInsertNewsData();
		// 현재까진 ArrayList news 배열에 모든 객체 생성됨 
		
		int nRow = 10;
		int nCol = 8;
		
		String uri = "c:/filetest/news.html";
		FileWriter fw = null; // news.html 파일 쓰기 위한 객체 변수 선언 및 초기값 설정
	
		try {
			fw = new FileWriter(uri);
			fw.write("<!doctype html>"); // html 5 선언 
			fw.write("<head><title>Naver News Stand</title></head>");
			fw.write("<body><table border=1>"); // 선들 사이의 간격
			
			int count = 0;
			for(int nTR=0;nTR<nRow;nTR++) { // 행 반복문 
				fw.write("<tr>"); // 한행 시작
				
				for(int nTD=0;nTD<nCol;nTD++) { // 열(총8회) 반복문
					fw.write("<td>");
					fw.write("<a href=http://" + newsData.news.get(count).url + ">");
					fw.write(newsData.news.get(count).press);
					fw.write("</a>");
					fw.write("</td>"); 
					count++;
				} // 열종료
				fw.write("</tr>");
			} // 행렬 종료 
			
			fw.write("</table></body>");
			fw.write("</html>");
			fw.close();
			
		}catch (IOException e) {
			System.out.println(e.getMessage());
		}
	}
}

 

- MethodClass를 MainClass 에서 실행 

 

package com.bjy;

public class MainClass {

	public static void main(String[] args) {
		MethodClass.createHTML();

	}

}

<c드라이브 filetest 폴더에 news.html 파일이 생성된 것을 볼 수 있다>

 

<파일을 실행하면 이런 화면이 뜨며 버튼을 누르면 해당 신문사의 링크로 이동한다>

  • 느낀점 : MethodClass 생성시 static 개념이 잘 잡혀있지 않아 static 변수인 newsData 변수 선언 후
               왜 객체 생성 없이 createHTML 메서드에서 사용하는지 헷갈렸다.
               static 변수, 메서드는 해당 프로젝트의 클래스 실행시, 그 프로젝트에 있는 클래스들의 
               모든 static 멤버들이 Method 영역에 생성된다는 것을 꼭 기억하자 ! 
               그래서 static 메서드에선 instance 변수들 사용이 불가하다 (인스턴스 변수들은 객체 생성시 
               Heap 메모리 영역에 만들어지기에 static 멤버들의 영역과 아예 다르다.)

'Java' 카테고리의 다른 글

TIL_210323_상속, 오버라이딩  (0) 2021.03.23
Bubble Sort : 거품 정렬  (0) 2021.03.22
자바의정석_연산자(Operater)  (0) 2021.03.22
자바의정석_변수(Variable)  (0) 2021.03.22
TIL_210318_클래스 생성, static 변수  (0) 2021.03.18