네이버와 다음의 호스트 이름과 IP 주소를 알아보자 (자바 InetAddress 클래스를 활용)

안녕하세요

이번 시간에는 자바 네트워크 부분에 대해 글을 쓸까 합니다.

오늘 글 쓰는거는 자바 네트워크와 관련된거로 보시면 됩니다.


그리고 쉬는 날에 다시 자바 jdbc를 좀 더 다룰까 합니다.


어쨋든 잘 봐주십쇼~!

이론적인 부분은 제가 한번 올리고

오늘 올리는 것들은 자바 네트워크 예제와 주석입니다


========================================================


import java.net.*;

public class test {

public static void main(String[] args) {
/* InetAddress 클래스
* -IP를 추상화한 클래스
* -new에서 생성하는 것이 아니라 static 메소드로 얻는다.*/

try{
InetAddress inet=InetAddress.getByName("www.naver.com");
System.out.println("호스트 이름 : "+inet.getHostName());
System.out.println("호스트 IP 주소 : "+inet.getHostAddress());
/* IP주소 : 컴퓨터(호스트)를 구별하는 데 사용되는 고유한 주소값
* 4바이트 정수로 a.b.c.d와 같은 형식으로 표현하며
* (a,b,c,d는 0~255의 정수값)
* */

// 이 호스트 네임을 사용하고 있는 주소들을 배열로 저장하자
InetAddress[] inets=InetAddress.getAllByName("www.daum.net");
if(inets!=null){
for(InetAddress ia:inets){
System.out.println("호스트 명 : "+ia.getHostName());
System.out.println("IP 주소 : "+ia.getHostAddress());
}
}

}catch(UnknownHostException e){ // 이 부분을 명시하지 않으면 에러 발생
e.printStackTrace();
}

}
}

========================================================


실행 결과



네이버와 다음의 IP 주소는 위와 같이 나오네요

네이버는 공통적으로 나오는 것 같은데..

다음은 컴퓨터마다 다르게 나온것 같았습니다..

나중에 한번 그 이유를 알아보겠습니다




자바 Update문을 활용하여 db의 데이터 수정하기

안녕하세요

이번 시간에는 자바에서 Update문을 활용하여

SQL Develop문의 db 데이터를 수정하는 예제를 올려봅니다.

이번 예제도 앞선 예제와 크게 다른 바가 sql문만 차이가 있습니다.

자 그럼 예제를 보시죠


==========================================================

public class Test {

public static void main(String[] args) throws Exception {

//Memo 테이블의 내용을 수정하자 (작성자, 메모내용, 작성일)
Scanner sc = new Scanner(System.in);
System.out.println("수정할 글번호 입력=>"); // PK = WHERE 조건절
int idx = sc.nextInt();
System.out.println("수정할 작성자 입력=>");
String name = sc.next();
sc.skip("\r\n"); // 엔터값 건너뛰기
System.out.println("수정할 메모내용 입력=>");
String msg = sc.nextLine();
System.out.println(idx+"/"+name+"/"+msg);

FileReader fr = new FileReader("DB.properties");
Properties p = new Properties();
p.load(fr);

// 드라이버 로드
Class.forName(p.getProperty("driver"));
String url = p.getProperty("dburl");
String user = p.getProperty("user");
String pwd = p.getProperty("pwd");

Connection con = DriverManager.getConnection(url, user, pwd);
System.out.println("DB연결 성공");

//STMT 얻기
Statement stmt = con.createStatement();

//SQL문 작성 => UPDATE문
//String sql = "UPDATE MEMO SET NAME='"+name+"'" + ", MSG='"+msg+"'" + " where idx='"+idx+"'";
String sql = "UPDATE MEMO SET NAME='"+name+"',";
sql+=" msg='"+msg+"', wdate=SYSDATE WHERE idx="+idx;
System.out.println(sql);

//실행-> dml문 int executeUpdate()
int cnt = stmt.executeUpdate(sql);

String str=(cnt>0)?"수정 성공":"수정 실패-글 번호가 없어요";
System.out.println(str);

//DB연결 종료
stmt.close();
con.close();
sc.close();

}

}

==========================================================


-실행 결과-



SQL Developer에서 memo 테이블을 조회한 화면입니다.

데이터가 참 많죠.



저는 여기서 idx가 15번인 행의 데이터를 변경해보겠습니다.

작성자를 '박근혜' 로 수정할 메모내용 입력을 '대통령'으로 바꾸겠습니다.

위의 그림을 보면 성공적으로 변경 됬다는 것을 알 수 있습니다.




자 그럼 sql developer에 가서 다시 한번 확인해 봅시다

select * from memo를 한 결과 맨 첫번째 15번째 idx 번호의 데이터가

변경 됬다는 것을 알 수 있습니다.



자바 jdbc를 활용하여 해당 부서의 사원 정보를 출력하는 프로그램을 작성하세요

안녕하세요

이번 시간에는 자바 jdbc와 오라클을 활용하여

해당 부서의 사번, 사원명, 부서명, 업무, 급여, 근무지의 사원 정보를 출력하는 자바 프로그램 예제를 올려보겠습니다.

여기서 잠깐..

지금 같은 예제는 소스를 복사해서 붙여넣는다고 하여 실행되는것이 아니라

오라클 (sql developer)에 'EMP' 테이블과 'DEPT' 테이블이 있어야 가능합니다.

EMP, DEPT 테이블은 직접 만들어보셔서 테스트 해보시면 됩니다

테이블 만드는건 어렵지 않죠~


자 그럼 예제와 실행 결과 화면을 올려보겠습니다

렛츠고~!!

========================================================


public class test {

public static void main(String[] args) throws Exception {

String deptno = JOptionPane.showInputDialog("검색하고자 하는 부서번호를 입력하세요");
// 해당 부서의 사원 정보를 출력하는 프로그램을 작성하세요
// 사번, 사원명, 부서명, 업무, 급여, 근무지 - select (emp,dept와 조인)

//1. 드라이버 로딩
Class.forName("oracle:jdbc:driver:OracleDriver");

//2. DB연결
String url="jdbc:oracle:thin:@localhost:1521:ORCL";
String user="scott", pwd="tiger";
Connection con=DriverManager.getConnection(url, user, pwd);
System.out.println("DB에 연결");

//3. Statement 얻기
Statement stmt = con.createStatement();

//4. sql문 작성(select문, join문)
String sql = "SELECT e.deptno, empno, ename, dname, job, sal, loc "
+" FROM EMP E JOIN DEPT D"
+" ON E.DEPTNO=D.DEPTNO"
+" WHERE E.DEPTNO= "+deptno;
System.out.println(sql);

//5. 실행-executeXXXX()
ResultSet rs = stmt.executeQuery(sql);
System.out.println("-----------------------------------------------------------------------");
System.out.println("dno"+"\t"+"empno"+"\t"+"ename"+"\t"+"dname"+"\t"+"job"+"\t"+"sal"+"\t"+"loc");

//6. 실행 결과 데이터 가져와 출력하기
while(rs.next()){
int dno=rs.getInt(1);
int empno=rs.getInt(2);
String ename=rs.getString(3);
String dname=rs.getString(4);
String job=rs.getString(5);
float sal=rs.getFloat(6);
String loc=rs.getString(7);
System.out.println(dno+"\t"+empno+"\t"+ename+"\t"+dname+"\t"+job+"\t"+sal+"\t"+loc);
}

System.out.println("-----------------------------------------------------------------------");

//7. close
rs.close();
stmt.close();
con.close();
}
}

========================================================

위의 소스 코드를 실행하면 아래와 같은 화면이 자바 콘솔창에 출력됩니다


부서번호를 입력하라는 콘솔창이 뜨면 10,20,30번 부서 중에

30번 부서번호를 입력하게 되면




30번 부서의 정보가 출력되면서 프로그램은 끝이 나게 됩니다


DB.properties 파일을 생성하여 자바로 테이블을 delete 하는 예제


안녕하세요

이번 시간에는 기존의 방식과는 달리 테이블에 데이터를 수정하는 예제입니다

데이터를 삭제 할 때 DB.properties라는 파일을 추가하여

데이터를 삭제해보겠씁니다.

잘 봐주세요~!!

패키지 익스플로러에 파일을 추가해서 위와 같이 작성하고 저장하자

========================================================

public class test {

public static void main(String[] args) throws Exception {

//DB.properties 파일과 스트림 연결
FileReader fr = new FileReader("DB.properties");
Properties prop = new Properties();
//키 값과 벨류값을 매핑하여 저장한다.
prop.load(fr);

//DB.properties 파일 내용이 Properties 객체에 저장됨
Class.forName(prop.getProperty("driver"));
String url=prop.getProperty("dburl");
String user=prop.getProperty("user");
String pwd=prop.getProperty("pwd");
Connection con = DriverManager.getConnection(url,user,pwd);
System.out.println("DB 연결 성공");

// 삭제할 글번호를 입력받는다.=>JOPtionPane 이용
String idxStr=JOptionPane.showInputDialog("삭제할 글 번호를 입력하세요");

//Statement 얻어오기
Statement stmt = con.createStatement();

String sql = "delete from memo where idx = '"+idxStr+"'";
System.out.println(sql);

/*DML문장 (INSERT, DELETE, UPDATE문)인 경우
* public int executeUpdate(String sql) 메소드를 활용한다.
* sql문에 의해 영향 받은 레코드수를 반환한다.
* select 할 때는 쓰지 않는다.
*/

int delCount=stmt.executeUpdate(sql);
System.out.println("삭제된 레코드수 : " + delCount);
if(delCount>0){
System.out.println("삭제 처리됨");
}else{
System.out.println("삭제 실패 : 글번호가 존재하지 않아요");
}

if(stmt!=null) stmt.close();
if(con!=null) con.close();

}
}

========================================================

위의 소스 코드를 실행하면 다음과 같습니다.



먼저 sql developer에서 select * from memo로 메모 테이블을 조회하면

5개의 행이 있습니다.




소스 코드를 실행하면 맨 처음에 삭제할 글 번호를 입력하라는 알림창이 나옵니다.

전 5번째 행 데이터를 지워보겠습니다.



잠시후 자바 콘솔 창에는 5번째 레코드가 삭제되었다는 메시지가 뜹니다.

자 그럼 sql developer에서 확인을 해보겠습니다.



5번째에 있던 네이버 데이터가 사라졌습니다.

성공적으로 삭제가 됬습니다.



자바 jdbc에서 데이터를 Insert 해보자

안녕하세요

이번 시간에는 자바 JDBC에서 데이터를 INSERT 하는 예제를 만들어

오라클 환경에 있는 데이터베이스의 memo 테이블에 데이터를 삽입하는 예제를

올려봅니다.


이 예제도 select문과 비슷한 로직이지만 메소드에 조금 차이가 있으니

신경 써서 보십쇼~!


========================================================

public class test {

public static void main(String[] args) throws Exception {

// 메모 테이블에 메모 내용을 등록해보자.
String name = JOptionPane.showInputDialog("작성자를 입력하세요");
String msg = JOptionPane.showInputDialog("메모 내용을 입력하세요");

//1. 드라이버 로딩
Class.forName("oracle:jdbc.driver.OracleDriver");
System.out.println("드라이버 로딩 성공");

//2. DB연결=> Connection 얻기 (DriverManager통해서)
String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
String user="scott", pwd="tiger";
Connection con = DriverManager.getConnection(url,user,pwd);
System.out.println("DB에 연결");

//3. Statement 얻기 => Connection 통해서
Statement stmt = con.createStatement();

//4. SQL문 작성 => INSERT문 작성
String sql = "INSERT INTO MEMO(idx, name, msg, wdate)";
  sql += " VALUES(5, " + "'"+name+"', '"+msg+"',sysdate)";
System.out.println(sql);

//5. executeUpdate()메소드로 전송
int cnt=stmt.executeUpdate(sql);
System.out.println(cnt>0?"등록 성공":"등록 실패");

//6. DB 자원 반납
stmt.close(); con.close();
}
}

========================================================

위의 예제를 실행하면 아래와 같은 결과를 얻게 됩니다



select * from memo;

를 해서 나온 결과입니다.

현재 4개의 데이터만 있습니다.





작성자에 네이버를, 메모 내용에 포털사이트 라고 입력하면

memo 테이블에 name, msg 필드에 데이터를 추가하게 됩니다



자바 콘솔창에서는 위와 같은 출력문이 나오게 되고

sql developer 에서 select문으로 memo 테이블을 조회하게 되면



맨 마지막 필드에 네이버, 포털사이트 가 추가된것을 알 수 있습니다.





자바 JDBC로 데이터를 조회하는 Select문 활용

안녕하세요

이번 시간에는 테이블의 데이터를 조회 할 수 있는 데이터베이스의 Select문을

자바에 접목하여 자바에서도 오라클에 있는 db 정보를 조회 할 수 있는 예제를 올려봅니다.

잘 봐주세요~!!


=========================================================

public class test {

public static void main(String[] args) throws Exception {

//1. 드라이버 로딩 - odjbc7.jar
//=> Class.forName("패기지경로.드라이버명")메소드를 이용
// 자바와 오라클의 통역관(OracleDriver)
Class.forName("oracle:jdbc:driver:OracleDriver");
String url="jdbc:oracle:thin:@localhost:1521:ORCL";
//프로토콜:oracle:드라이버타입:@호스트:포트번호:SID
//url은 DBMS사마다 다르다.
String user="scott", pwd="tiger";
//2. DB와 연결: DriverManager.getConnection()
Connection con = DriverManager.getConnection(url,user,pwd);
System.out.println("DB연결됨");

//3. DB에 SQL문을 전송하기 위해 Statement 객체를 얻어온다.
Statement stmt = con.createStatement();

//4. SQL문 작성
String sql = "SELECT idx, name, msg, wdate FROM memo ORDER BY 1";
//DML 문장(INSERT, DELETE, UDPATE) => int executeUpdate(sql) / 반환 타입 int
//DQL 문장(SELECT문)=> ResultSet executeQuery(sql) / 반환 타입 ResultSet

//5. sql문을 DB에 전송(실행)
ResultSet rs = stmt.executeQuery(sql); // 결과 테이블 반환
System.out.println("--------------------------------------------------");
System.out.println("idx"+"\t"+"name"+"\t"+"msg"+"\t\t"+"wdate");
//ResultSet의 메소드
/*boolean next() : rs의 논리적 커서는 첫번째 행의 직전에 위치한다
=> before first
next()가 호출되면 커서를 다음으로 이동시킨다.
이동시켜 가리키는 지점에 레코드가 있으면 true를 반환, 없으면 false를 반환한다.
---------------------------------
자료형 getXXX("컬럼명") : 해당 컬럼 값을 꺼낼 때 호출
이 때 오라클 자료형과 자바 자료형을 맞춰서 꺼내오자
*/

while(rs.next()){// memo 테이블 1번 레코드 직전에 위치해서 next가 다음 칸으로 이동(첫번째 행을 가리킴)
// 메모 테이블에 컬럼 데이터를 뽑아오기
int idx=rs.getInt("idx"); // memo 테이블에 글번호값 받기
String name=rs.getString("name"); // 작성자
String msg=rs.getString("msg"); // 메모 내용
java.sql.Date wdate = rs.getDate("wdate"); //작성일
System.out.println(idx+"\t"+name+"\t"+msg+"\t"+wdate);
}

System.out.println("--------------------------------------------------");

//6. DB자원 반납 - 순서 지켜야 함
rs.close();
stmt.close();
con.close();
}
}

========================================================

위의 문장을 실행하면 아래와 같습니다.

memo 테이블에 있는 idx, name, msg, wdate 컬럼을 가지고 와 출력하면서

프로그램은 종료됩니다.


위의 예제는 사용자가 프로그램에 직접 개입하지 않고 단순히 조회하는 예제입니다

하지만 다음 예제는 사용자가 작성자 명을 입력하면 그 영역을 찾아주는 예제입니다

위의 예제와 비슷합니다만 그래도 유용합니다



검색할 작성자명에 '길' 이라는 키워드를 입력하면

이름에 '길' 이 들어가 있는 데이터 영역 다 보여주기

========================================================


public class test {

public static void main(String[] args) throws Exception {

Class.forName("oracle:jdbc:driver:OracleDriver");
String url="jdbc:oracle:thin:@localhost:1521:ORCL";
String user="scott", pwd="tiger";
Connection con = DriverManager.getConnection(url,user,pwd);
System.out.println("DB연결됨");

Statement stmt = con.createStatement();

String input_name = JOptionPane.showInputDialog("검색할 작성자명을 입력하세요");

// 특정 작성자가 쓴 글만 출력하세요 => where절 select문
//String sql = "SELECT idx,name,msg,wdate FROM memo WHERE name = " + "'"+input_name+"'";

// '길' 자가 입력되면 홍길동, 김길동.. 글이 모두 나오게.
String sql2 = "SELECT idx,name,msg,wdate FROM memo"
+" WHERE name LIKE '%" + input_name +"%'";

ResultSet rs = stmt.executeQuery(sql2);
System.out.println("----"+input_name+"님 글 검색 결과-------");
while(rs.next()){

int idx=rs.getInt(1);
String name=rs.getString(2);
String msg=rs.getString(3);
Date wdate=rs.getDate(4);
System.out.println(idx+"\t"+name+"\t"+msg+"\t"+wdate);
}

System.out.println("------------------------------");

// 순서 지켜야함
rs.close();
stmt.close();
con.close();

}
}


========================================================


위의 소스 코드를 실행하면 아래 그림과 같습니다



'길' 이라는 단어를 입력하면..



Memo 테이블에 name 필드에 '길' 이라는 이름이 전부 다 조회된다






자바 JDBC 설치법. 따라하기만 하면 100% 됨

안녕하세요

이번 시간에는 정말 유용한 자바와 오라클 연동 방법입니다.

쉽게 말해서 자바와 데이터베이스를 연동하는 것이죠

저도 옛날에 도전해봤는데, 잘 못해서 헤맸는데

얼마전에 확실히 방법을 알아서

이렇게 올려봅니다.



일단 본격적으로 설치법을 올리기 전에

먼저 깔아야 할게 있습니다.

http://www.oracle.com/technetwork/database/enterprise-edition/downloads/database12c-win64-download-2297732.html

위의 오라클 사이트 경로로 들어가서..



위 두 개의 파일을 다운받으세요

오라클 설치법은 다른 블로그를 보시면 됩니다. 굉장히 쉽습니다


자 그럼 오라클이 설치되었다고 가정하고 설치법을 올리겠습니다.


1.  JDBC 드라이버 경로에서 ojdbc7.jar 파일 복사




2. C:\Java\jre1.8.0_102\lib\ext 경로에 가서 복사 한 파일 붙여넣기




3.  CLASS PATH 설정 ' .;C:\JAVA\jre\lib\ext\ojdbc7.jar '






((3.5. 오라클 서버 실행 실행창에서 services.msc 치고 OracleServiceOrcl 시작, XXXXlistener 시작 (JDBCTest.java)))





보통 오라클을 설치 할 때 자동으로 실행 상태로 되기 때문에 이 작업은 필요없다

하지만 컴퓨터를 부팅할 때 오라클 서비스도 시작을 하기 때문에 부팅 속도가 조금 늦어

실행 상태를 수동으로 맞추는 경우가 많다

이 3.5 과정이 귀찮으면 그냥 자동으로 맞춰서 해도 무방하다.



4.  JRE System Library 우 클릭하여 'Configure Build Path' 클릭
 JRE System Libary [jre...] 우측에 Edit.. 버튼 클릭
두번째 Alternate JRE 옆에 Installed JREs... 클릭
Edit을 눌러 경로를 바꾸자(C:\JAVA\jre) – ojdbc7.jar 파일 있는 곳으로





(자바를 실행하기 전에 먼저 SQL Developer에서 테이블을 하나 생성하자)

5. INSERT 문을 수행하는 자바 예제를 실행해보자

코드는 아래와 같다

=======================================================

package jdbc.day1;
import java.sql.*;
public class MyFirstJDBC {
public static void main(String[] args) throws ClassNotFoundException, SQLException{
//1.  드라이버 로딩 Class.forName("oracle.jdbc.driver.OracleDriver"); System.out.println("  드라이버 로딩 성공");
//2. DB 연결 String url="jdbc:oracle:thin:@localhost:1521:ORCL"; String user="scott"; String pwd="tiger"; Connection con = DriverManager.getConnection(url,user,pwd); System.out.println("DB Connected..");
//3. Statement 얻어오기 Statement stmt=con.createStatement();
//4.  전송할 쿼리문(SQL문) 작성 String sql="INSERT INTO memo(idx,name,msg)";   sql+=" VALUES(1,'홍길동',' 첫번째 글입니다.*^.^*')"; System.out.println(sql);
//5. execute()  메소드로 실행 boolean isRs=stmt.execute(sql); System.out.println("isRs="+isRs);
//6. close() stmt.close(); con.close();
}
}

========================================================


6. SQL Developer에서 select문으로 조회를 하면 데이터가 들어가 있음





Oracle SQL Developer 첫 시작!! 테이블 생성(CREATE),조회(SELECT),삽입(INSERT)

안녕하세요

오늘부터는 오라클 SQL문 예제를 조금씩 올려볼까 합니다.

실행 환경은 많이 쓰이는 Oracle SQL Developer 입니다.




지금까지 db 관련된 툴을 사용했을 때 도스 화면과 같은 창에서만 실행했는데

윈도우 느낌이 물씬 나는 환경에서 DB를 다루는건 이번이 처음이네요.

어쨋든 오늘은 테이블을 생성하고, 조회하고, 데이터를 추가하고 제거하는 간단한

SQL 문장을 올려봅니다.



테이블 생성 문장
CREATE TABLE 테이블명(
속성명 자료형(크기) [제약조건]
);

=========================================================

학생 테이블 생성을 생성

CREATE TABLE student(
  IDX NUMBER(4) PRIMARY KEY,
  NAME VARCHAR2(20) NOT NULL,
  TEL VARCHAR(20),
  CNAME VARCHAR2(30),
  ROOM NUMBER(3),
  INDATE DATE
);

실행 결과



=========================================================


데이터 추가(INSERT문 활용)

INSERT INTO student(IDX,NAME,TEL,CNAME,ROOM)
VALUES(1, '홍길동', '02-3333-5555', '자바개발자반', 401);

INSERT INTO student(IDX,NAME,TEL,CNAME,ROOM,INDATE)
VALUES(2, '임길동', '010-9999-0231', '방송영상반', 402, SYSDATE);



=========================================================


student 테이블에 추가 된 데이터를 조회해 보자


select * from student;



=========================================================


오라클에서는 테이블에 데이터를 추가 했으면 그걸로 끝난게 아닙니다

반드시 commit을 해줘야 데이터가 테이블에 확실히 들어갑니다.

명렁어는 다음과 같습니다.


COMMIT;




=========================================================


select문과 where 절의 활용 예제


--자바반의 학생정보(학번,이름,학급명,교실)를 보여주세요
select IDX,NAME,CNAME,ROOM from student where CNAME='자바개발자반';




--방송영상반의 학번,이름,학급명,등록일을 보여주세요
select IDX,NAME,CNAME,SYSDATE from student where CNAME='방송영상반';



--홍길동의 정보만 보여주세요
select * from student where NAME='홍길동';



--순서대로 정렬(asc=오름차순 / desc=내림차순)
select * from student order by idx desc;





=========================================================


 데이터 수정(UPDATE문)

--홍길동의 연락처가 '010-5678-9999'로 변경되었어요 수정하세요(where절을 빼면 전부 다 바뀜 ㄷㄷ) / 취소는 rollback
update student set tel = '010-5678-9999' where name='홍길동';

--임길동의 학급을 자바개발자반, 교실 401호로 변경하세요
update student set CNAME='자바개발자반', ROOM='401' where name='임길동';




select * from student;



=========================================================

 데이터 삭제 (delete문)

delete  from student where name='임길동';





InputStream 보다 좀 더 빨리 데이터를 처리 할 수 있는 BufferedReader/Writer

안녕하세요

이번 시간에는 BufferedReader/Writer를 활용하여 좀 더 빨리 데이터를 처리 할 수 있는

예제를 올려봅니다.


=====================================================

public class BufferedRedaerTest {

public static void main(String[] args) throws IOException {

InputStream is = System.in;
PrintStream ps = System.out;
//BufferedReader br = new BufferedReader(is); // 1바이트 노드 스트림을 바로 못받음, 그래서 중간 다리스트림을넣어야함
BufferedReader br = new BufferedReader(new InputStreamReader(is));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(ps));


/*int input=0;
// 2byte는 char[]타입 배열에 넣어야 함
char[] buf = new char[100];

while((input=br.read(buf))!=-1){
bw.write(buf, 0, input);
bw.flush();
}*/

// 줄 단위로 입력
String line="";
bw.write("입력하세요=>");
while((line=br.readLine())!=null){
bw.write(line+"\r\n"); // 줄 바꿈을 강제로 넣어줘야 엔터가 됨
bw.newLine(); // 줄 바꿈 (리눅스 운영체제에서 Enter 키가 \n임 / 윈도우 운영체제는 \r\n)
bw.flush();
}

bw.close();
br.close();
is.close();
ps.close();
}

}

=====================================================

실행 결과는 이전에 했던 거와 같습니다





InputStreamReader를 활용하여 키보드 입력을 받아 콘솔에 출력 및 파일로 저장

안녕하세요

이번 시간에는 InputStreamReader / OutputStreamWriter를 활용한 예제를 보여드리겠습니다

일단 InputStreamReader / OutputStreamWriter를 설명하자면..

 [1] 2byte 기반 스트림
 [2] Bridge Stream
 - 1byte로 입력받은 데이터를 2byte로 조합하여 읽거나 내보낸다.
 - 1byte 기반 스트림을 2byte 기반 필터 스트림과 중간에 연결해주는 기능을 수행함


아래 예제는 키보드 입력을 받아서 콘솔에 출력하는 예제입니다.

=======================================================

public class InputStreamReadertest {

public static void main(String[] args) throws IOException {

InputStreamReader ir = new InputStreamReader(System.in);
OutputStreamWriter ow = new OutputStreamWriter(System.out);

ow.write("입력하세요=>");
ow.flush();

// 배열을 쓰려면 char[] 배열을 활용해야 한다.

int input=0;
while((input=ir.read())!=-1){

ow.write(input);
ow.flush();
}

ir.close(); ow.close();

}

}

=======================================================

저 소스 코드를 실행할 때 자바 콘솔 창에서 하는 것보다 도스 창에서 실행하는 것이

더 낫습니다.



소스코드를 실행하려면 해당 프로젝트에 src 폴더가 아닌 bin 디렉토리에 가서

java io,day4.InputStreamReaderTest 명령어를 쳐야 실행이 됩니다

중간에 io.day4는 패키지 명이고 그 안에 InputStreamReaderTest 라는 자바 파일이 있습니다.



InputStreamReader / OutputStreamWriter 를 활용한 두 번째 예제도 올려봅니다.

두 번째 예제는 c:myjava 밑에 utf-8 방식으로 파일을 저장하는 예제입니다.

이것 또한 매우 간단합니다.

하지만 저 같은 경우는 io 입출력 예제를 처음 접하기 때문에 잘 몰라 어렵더군요 ㅜ



public class InputStreamReadertest2 {

public static void main(String[] args) throws IOException {

//2바이트로 읽어서 2바이트로 내보내자
//FileReader fr = new FileReader("C:/MyJava/스트림테스트.txt"); // 글자가 깨짐

FileInputStream fis = new FileInputStream("C:/MyJava/스트림테스트.txt");
InputStreamReader ir = new InputStreamReader(fis, "UTF-8");
OutputStreamWriter ow = new OutputStreamWriter(System.out);

int input=0;
while((input=ir.read())!=-1){
ow.write(input);
ow.flush();
}

fis.close();
ir.close();
ow.close();
}

}


자바에서 디렉토리를 생성하는 방법과 전체공간과 가용공간을 알아보는 메소드 활용

안녕하세요

이번 시간에는 제목이 곧 내용입니다.

자바에서 디렉토리를 생성하고, 삭제하는 방법과

생성된 디렉토리의 전체공간과 가용공간이 얼마인지 알아보는 시간을 가지겠습니다.


이번 내용도 예제에 주석을 달면서 설명하겠습니다~


public class test {

public static void main(String[] args) {

//디렉토리를 만들어보자.
File dir = new File("sample"); //디렉토리명 'sample' 지정
boolean bool=dir.exists();
System.out.println(dir.getName()+"의 존재 여부 : " + bool);
if(!bool){ // 디렉토리가 존재하지 않는다면 생성
boolean b = dir.mkdir(); // 단일 디렉토리 생성
System.out.println("디렉토리 생성 여부 : " + b);
}

//디렉토리와 그 안에 세부 디렉토리를 생성하고 싶을 때
File dir2 = new File("example", "day01"); // example 폴더 안에 day01 폴더 생김
if(!dir2.exists()){
boolean c = dir2.mkdirs(); // 여러 디렉토리 생성 (mkdirs)
System.out.println("디렉토리2 생성 여부 : " + c);
}

//디렉토리 이름 변경 : renameTo(File f) : sample=> sample2로 변경
dir.renameTo(new File("sample2"));

//디렉토리 삭제 : delete()
//해당 디렉토리에 파일이 없을 경우만 삭제한다.

boolean d = dir2.delete();
System.out.println("삭제 여부 : " + d); // example은 삭제 안되고 day01 디렉토리 삭제됨
long tspace = dir.getTotalSpace(); // 디렉토리 전체공간
long uspace = dir.getUsableSpace(); // 가용공간
System.out.println("tspace="+tspace+", uspace="+uspace);

//C:/ 디렉토리 아래 파일 목록을 가져오자.
File dir3 = new File("C:/");
// 두 가지 방법이 있다
//1. String[] list()

String[] files = dir3.list();
if(files!=null){
System.out.println("----------"+dir3.getName());
for(String file : files){
System.out.println(file);
}
}

System.out.println("********************************");

//2. File[] listFiles()
File[] files2 = dir3.listFiles();
if(files2!=null){
System.out.println("---------"+dir3.getName());
for(File file : files2){
System.out.println(file);
}
}
}
}


위의 결과는 아래와 같습니다. 직접 소스를 쳐보고 이해하면서 결과를 이해하면 도움이 될 것 같습니다.





이전에 썼던 예제와 오늘을 썼던 예제를 응용하면 아래와 같은 결과도 나옵니다

결과는 길게 나왔지만 소스는 짧습니다.



public class test {

public static void main(String[] args) {

// C 디렉토리의 파일/DIR 목록을 가져오되 아래와 같이 출력되도록 하세요
// File[] listFiles() 메소드 활용
/* -------------------------------------------
* 파일명 DIR/FILE 여부 파일크기 마지막 수정날짜
* */

File dir = new File("C:/");

File[] files2 = dir.listFiles();
if(files2!=null){

System.out.println("--------------------------------------------------------------------------");
System.out.println("파일명\t\tDIR/FILE\t파일크기\t마지막 수정일");
System.out.println("--------------------------------------------------------------------------");

for(File file : files2){
String fname = file.getName();
String type = (file.isDirectory())?"DIR":"File";
long fsize = file.length();
long time = file.lastModified();
Date date = new Date(time);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String lastDate = sdf.format(date);

System.out.println(fname + "\t\t\t\t  " + type + "\t\t  " + fsize + "\t  " + lastDate);
}

System.out.println("--------------------------------------------------------------------------");

}


}

}


자바에서 파일의 정보들을 알 수 있는 메소드 예제

안녕하세요

2일만에 블로그를 하게 되네요.

어제는 컴퓨터를 또 포맷할 일이 있어서 재설치 하느라 블로그를 못하게 됬네요


이번 시간에는 자바에서 File 메소드를 활용하여 파일의 정보를 알 수 있는 간단한 예제를

올려봅니다.

잘 봐주세요~!



<1> 첫번째 예제 - 파일의 파일명, 절대경로, 상대경로, 상위 부모 디렉토리, 파일 크기, 파일 여부, 디렉토리 여부, 파일을 마지막으로 수정한 날짜 등의 정보를 알려주자

public class test {

public static void main(String[] args) {

// 상대경로 <-> 절대경로(C:\..)
String fileStr="src/io/day3/FileReaderWriter.java";
File file = new File(fileStr);
// File 클래스의 메소드 활용
print("파일명 : " + file.getName());
print("파일의 절대경로: " + file.getAbsolutePath());
print("파일의 상대경로 : " + file.getPath());
print("상위 부모 디렉토리 : " + file.getParent());
long fsize=file.length();
print("파일 크기 : " + fsize + " bytes");

print("파일 여부 : "+file.isFile());
print("디렉토리 여부 : "+file.isDirectory());
File dir = file.getParentFile();
print(dir+"의 디렉토리 여부 : "+dir.isDirectory());

//파일을 마지막으로 수정한 날짜
//1970년 1월 1일부터 마지막 수정한 날짜까지의 시간을 밀리세컨드 초 (1/1000) 단위로 반환한다.
long time = file.lastModified();
print(String.valueOf(time));

//long형을 Date 형으로 바꾸면 날짜를 읽기 쉽게 바꿀수 있다

Date date = new Date(time);
print(date.toString());

//날짜 포맷
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//yyyy: 연도 2자리, MM: 월, dd: 일, hh: 시간, mm: 분, ss: 초
String strDate = sdf.format(date);
print(strDate);
}

public static void print(String str){
System.out.println(str);
}

}

위의 예제를 실행하면 아래와 같은 결과 화면이 자바 콘솔창에 출력됩니다.