레이블이 JAVA인 게시물을 표시합니다. 모든 게시물 표시
레이블이 JAVA인 게시물을 표시합니다. 모든 게시물 표시

2010년 4월 25일 일요일

Java inputStream <-> String

출처: http://childeye.tistory.com/171

inputStream -> String


StringBuffer out = new StringBuffer();
    byte[] b = new byte[4096];
    for (int n; (n = inputStream.read(b)) != -1;) {
        out.append(new String(b, 0, n));
    }
 out.toString();

-------------------------------------------------

String -> inputStream

  InputStream bai = new ByteArrayInputStream(out.toString().getBytes("UTF-8"));

2010년 1월 18일 월요일

확장자만 가져오기

String fileName="test.exe"
          String ext="";
          int i=fileName.lastIndexOf('.');
          if(i>0 && i <fileName.length()-1)
          {
           ext=fileName.substring(i+1).toLowerCase();
          }

2010년 1월 15일 금요일

숫자만를 전화번호형식(000-0000-0000)으로 표현

 /**
  * 숫자만 으로 이루어져 있는 전화번호를 형식을
  * 000-0000-0000 으로 표현하기 위해 만듬
  *  예) 027651111 => 02 - 765 - 1111
  */
 private String change(String text)
 {
  int textLength = text.length();
  String textOut ="";

  if(textLength>=9)
  {
   int startIndex=0;
   if("02".equals(text.substring(0,2)))
   {
    textOut+="02";
    startIndex+=2;
   }
   else
   {
    textOut+=text.substring(0,3);
    startIndex+=3;
   }
   textOut+=" - "+text.substring(startIndex,textLength-4);
   textOut+=" - "+text.substring(textLength-4,textLength);    
  }   
  return textOut;
 }
 

2009년 8월 7일 금요일

CLOB ....정리... 각 WAS 별

이놈에 CLOB라는게...

어떻게 WAS별로 설정이 조금씩 틀리군요..

정확히는..WAS별로 틀린게 아니라..WAS별로 datasource 설정이

틀려서 그런듯한데...

할때마다 CLOB 검색법 찾아서 하기도 지쳤습니다.

한번 정리 해봤습니다..

(중복이면 난감;; 개인적인 백업 목적도 있으니 중복이라도 야단치지 마세요;;)

 

import java.sql.Clob;
import weblogic.jdbc.common.OracleClob;
import oracle.jdbc.driver.OracleResultSet;
import oracle.sql.CLOB;
import org.apache.commons.dbcp.DelegatingResultSet;


String query1 = "select content from "+table+" where no="+ no + " for update";

con = getConnection();
con.setAutoCommit(false);//꼭 setAutoCommit을 false로 지정

pstmt = con.prepareStatement(query1);
rs = pstmt.executeQuery();

while (rs.next()){

 /**********************************************
 * Tomcat
 * ********************************************/
 Clob clob = rs.getClob(1);
 Writer writer = ((CLOB)clob).getCharacterOutputStream();
 Reader src = new CharArrayReader(contentData.toCharArray());
 char[] buffer = new char[1024];
 int read = 0;
 while ( (read = src.read(buffer,0,1024)) != -1)
 {
   writer.write(buffer, 0, read); // write clob.
 }
 src.close();               
 writer.close();   


 /**********************************************
 * weblogic
 * ********************************************/
 Clob clob = rs.getClob(1);
 Writer writer = ((OracleClob)clob).getCharacterOutputStream();
 Reader src = new CharArrayReader(contentData.toCharArray());
 char[] buffer = new char[1024];
 int read = 0;
 while ( (read = src.read(buffer,0,1024)) != -1)
 {
   writer.write(buffer, 0, read); // write clob.
 }
 src.close();               
 writer.close();


 /**********************************************
 * sunone
 * ********************************************/
 Clob clob = rs.getClob(1);
 Writer characterStream = clob.setCharacterStream(0);
 characterStream.write(contentData);
 characterStream.close();


 /**********************************************
 * interstage

 * ********************************************/

 CLOB clob = ((OracleResultSet)((DelegatingResultSet)rs).getDelegate()).getCLOB(1);
 BufferedWriter writer = new BufferedWriter(clob.getCharacterOutputStream());
 writer.write(form.getContent());
 writer.close();

}

con.commit();
con.setAutoCommit(true);

 

http://okjsp.pe.kr/seq/98774 <== 에서 가져온 자료

JDBC Code Templates

JDBC Code Templates

 

1. Connection
  
  
   *. To open a connection using thin driver :
      DriverManager.getConnection("jdbc:oracle:thin:@<mc-name>:<port-no>:<sid>",
                  "scott", "tiger");

      OR

      DriverManager.getConnection("jdbc:oracle:thin:@(description=(address=(host=<mc-name>)(protocol=tcp)(port=<port-no>))(connect_data=(sid=<sid>)))",
          "scott","tiger");


  
   *.  To open a connection using OCI driver.

       To use the default connection.
       DriverManager.getConnection("jdbc:oracle:oci8:@", "scott","tiger");

       Or

      DriverManager.getConnection("jdbc:oracle:oci8:@(description=(address=(host=<mc-name>)(protocol=tcp)(port=<port-no>))(connect_data=(sid=<sid>)))",
          "scott","tiger");


       Or

       DriverManager.getConnection("jdbc:oracle:oci8:@<tns-name>", "scott","tiger");
 
 
   *.  Closing a connection.
       conn.close();

  
   *.  To set auto commit on.
       conn.setAutoCommit(true)

  

   *.  To set the batch size to 100
       ((OracleConnection)conn).setDefaultExecuteBatch (100);


2. Statements

  
   *. To create a statement
      Statement stmt = conn.createStatement();


  
   *. To create a prepared Statement
      PreparedStatement pstmt =

      conn.prepareStatement ("insert into EMP (EMPNO, ENAME) values (?, ?)");

  
   *. To Create a callable statement.
       CallableStatement procnone = conn.prepareCall ("begin procnone; end;"

  
   *. To execute a SQL that returns a QUERY
      ResultSet rset = stmt.executeQuery ("select ENAME from EMP");

  
   *. To execute a DML that returns the no of rows affected
      PreparedStatement pstmt =
      conn.prepareStatement ("insert into EMP (EMPNO, ENAME) values (123, 'John')");
      int rows = pstmt.executeUpdate ();


      Ps. execute and executeQuery can also be called on a PreparedStatement.
      They return a boolean and resultSet respectively.

      PreparedStatement pstmt =
        conn.prepareStatement ("select ENAME from EMP where EMPNO = ?");
      pstmt.setInt(1,123);
      ResultSet rset = pstmt.executeQuery();

  
   *. To execute a DDL.
      boolean status = stmt.execute("create table temp(col1 int)");

  
   *. To Bind an IN variable.
      PreparedStatement pstmt =

        conn.prepareStatement ("select ENAME from EMP where EMPNO = ?");
      pstmt.setInt(1,123);
      ResultSet rset = pstmt.executeQuery();

  
   *  To Bind an OUT variable
      CallableStatement funcin = conn.prepareCall ("begin ? := funcout (?); end;");
      funcout.registerOutParameter (1, Types.CHAR);
      funcout.registerOutParameter (2, Types.CHAR);

      Where funcout is,
      create or replace function funcout (y out char)
         return char is
      begin
        y := 'tested';
        return 'returned';
      end;


  
   *  To set the batch size to 100
      ((OracleStatement)stmt).setRowPrefetch (100);

  
   *  To explicitly send the row to the server in batch mode.
      int rows = ((OracleStatement)stmt).sendBatch();


3. ResultSets

  
   * Fetch the next row
     rset.next();

  
   * Retrieve data from column i based on column no

     rset.getInt(i);

  
   * Based on Column Name
     rset.getInt("EMPNO");

  
   * Close the resultset
     rset.close();


4. Streams: Long columns in JDBC are streamed.

  
   * To set a long (Stream) column
     pstmt.setAsciiStream (1, <input-stream>, <input-stream-length>);

     If the string data is in Unicode format, then use setUnicodeStream.
     pstmt.setUnicodeStream (1, <input-stream>, <input-stream-length>);


     For long raw columns, use setBinaryStream
     pstmt.setBinaryStream (1, <input-stream>, <input-stream-length>);


  
     create table streamexample (data long)

     PreparedStatement pstmt =
      conn.prepareStatement ("insert into streamexample values (?)");
     InputStream is = new FileInputStream ("notes.txt");
     File file = new File ("notes.txt");
     pstmt.setAsciiStream (1, is, (int)file.length ());

  
   * To retrieve a long column
     ResultSet rset =
      stmt.executeQuery ("select * from streamexample");
    
     InputStream ascii_data = rset.getAsciiStream (1);


     // Loop, reading from the gif stream and writing to the file
     int c;
     while ((c = ascii_data.read ()) != -1)
        Systemm.out.print(c);


5. Objects

  
   * How to create a STRUCT type descriptor

     StructDescriptor type_descriptor =
      StructDescriptor.createDescriptor (<type name>, connection);

  
   * How to create a STRUCT object

     Object[] attributes = { ... };
     STRUCT obj = new STRUCT (<type descriptor>, connection, attributes };


  
   * How to create a SQL to Java type map entry.
   
     map.put (<SQL Type Name>, <Java class which implements SQLData interface>);

  
   * How to retrieve a STRUCT column.

     1. As a SQLData object.

     For example, to map SQL type "PERSON" to Java class "PersonObj.java"
     which implements oracle.jdbc2.SQLData interface:
 
     java.util.Dictionary map = new Hashtable (10);
     map.put ("PERSON", Class.forName ("PersonObj"));
     PersonObj obj = (PersonObj) rset.getObject (1, map);

     2. As a CustomDatum object
 
     CustomDatum obj = rset.getCustomDatum (1, <CustomDatum factory>);

     3. As a oracle.sql.STRUCT object


     STRUCT obj = (STRUCT) rset.getObject (1);
               
  
   * How to retrieve STRUCT attributes.

     1. With Connection default type map.

     STRUCT struct = ...
     Object[] attributes = struct.getAttributes ();

     2. With the requested type map.

     java.util.Dictionary map = ...
     STRUCT struct = ...
     Object[] attributes = struct.getAttributes (map);

     3. Without map, return as oracle Datums.

     Datum[] attributes = struct.getOracleAttributes ();

  
   * How to create a ARRAY type descriptor


     ArrayDescriptor type_descriptor =
       ArrayDescriptor.createDescriptor (<type name>, connection);

  
   * How to create a ARRAY object

     Object[] elements = { ... };
     ARRAY obj = new ARRAY (<type descriptor>, connection, elements };

  
   * How to retrieve a ARRAY column.

     ARRAY obj = ((OracleResultSet) rset).getARRAY (1);
               
  
   * How to retrieve ARRAY elements.

     ARRAY array = (ARRAY) rset.getObject (1);

     Object[] elements = array.getArray ();

     or


     Object[] elements = array.getArray (<type map for elements>);

     or

     Object[] elements = array.getArray (<begin index>, <count>);

     or

     Object[] elements = array.getArray (<begin index>, <count>, <type map>);

  
   * How to retrieve ARRAY elements as a ResultSet which holding the elements.

     ARRAY array = (ARRAY) rset.getObject (1);

     ResultSet array_rset = array.getResultSet ();

     or

     ResultSet array_rset = array.getResultSet (<type map for elements>);

     or

     ResultSet array_rset = array.getResultSet (<begin index>, <count>);


     or

     ResultSet array_rset = array.getResultSet (<begin index>, <count>, <type map>);

  
   * How to retrieve a REF column.

     REF obj = ((OracleResultSet) rset).getREF (1);
  
  
   * To access the value which a REF points to.

     REF ref = ((OracleResultSet)rset).getREF (1);
     Object value = ref.getValue ();    // use connection default map

     or

     REF ref = ((OracleResultSet) rset).getREF (1);
     Object value = ref.getValue (<type map>);   // use specified map

  
   * To change the value which a REF points to. 

     REF ref = ((OracleResultSet) rset).getREF (1);
     Object newValue = ...;
     ref.setValue (newValue); 

 

6. LOBS

  
   * To read a piece of a LOB.

     BLOB blob = ((OracleResultSet) rset).getBLOB (1);
     byte[] bytes = blob.getBytes (<begin index>, <length>);

     CLOB clob = ((OracleResultSet) rset).getCLOB (2);
     String str = clob.getSubString (<begin index>, <length>);

     BFILE bfile = ((OracleResultSet) rset).getBFILE (3);
     byte[] bytes = bfile.getBytes (<begin index>, <length>);


  
   * To read the LOB content as a stream.

     BLOB blob = ((OracleResultSet) rset).getBLOB (1);
     InputStream input_stream = blob.getBinaryStream ();
     input_stream.read (...);

     CLOB Clob = ((OracleResultSet) rset).getCLOB (1);
     Reader char_stream = Clob.getCharacterStream ();
     char_stream.read (...);


     CLOB Clob = ((OracleResultSet) rset).getCLOB (1);
     InputStream input_stream = Clob.getAsciiStream ();
     input_stream.read (...);

     BFILE bfile = ((OracleResultSet) rset).getBFILE (1);
     InputStream input_stream = bfile.getBinaryStream ();
     input_stream.read (...);

  
   * To write a specified amount of data into a LOB.

     BLOB blob = ((OracleResultSet) rset).getBLOB (1);
     byte[] data = ...
     int amount_written = blob.putBytes (<begin index>, data);

     CLOB clob = ((OracleResultSet) rset).getCLOB (1);
     String data = ...
     int amount_written = clob.putString (<begin index>, data);

  
   * To replace the LOB content from a stream.

     BLOB blob = ((OracleResultSet) rset).getBLOB (1);
     OutputStream output_stream = blob.getBinaryOutputStream ();
     output_stream.write (...);

     CLOB clob = ((OracleResultSet) rset).getCLOB (1);

     Writer char_stream = Clob.getCharacterOutputStream ();
     char_stream.write (...);

     CLOB Clob = ((OracleResultSet) rset).getCLOB (1);
     OutputStream output_stream = Clob.getAsciiOutputStream ();
     output_stream.write (...);
       
  
   * To get LOB length.

     long length = blob.length ();
 
     long length = clob.length ();

     long length = bfile.length ();  

2009년 7월 24일 금요일

Java 파일 이어쓰기

 

BufferedWriter file = new BufferedWriter(new FileWriter("filename"));  

//파일을 덮어쓴다.

 

BufferedWriter file = new BufferedWriter(new FileWriter("filename", true));
//이 코드는 파일이 없으면 새로 만들고 있다면 덮어쓰지 않고 이어서 쓰게한다.

 

BufferedWriter를 통해서 개행문자사용

file.write(str, 0, str.length());
file.newLine();

Java 날짜 팁

시스템의 밀리초 구하기.(국제표준시각(UTC, GMT) 1970/1/1/0/0/0 으로부터 경과한 시각)
------------------------------------------------------------------
// 밀리초 단위(*1000은 1초), 음수이면 이전 시각
long time = System.currentTimeMillis ( );
System.out.println ( time.toString ( ) );
------------------------------------------------------------------

현재 시각을 가져오기
------------------------------------------------------------------
Date today = new Date ();
System.out.println ( today );

결과 : Sat Jul 12 16:03:00 GMT+01:00 2000
------------------------------------------------------------------

경과시간(초) 구하기
------------------------------------------------------------------
long time1 = System.currentTimeMillis ();
long time2 = System.currentTimeMillis ();
system.out.println ( ( time2 - time1 ) / 1000.0 );
------------------------------------------------------------------

Date를 Calendar로 맵핑시키기
------------------------------------------------------------------
Date d = new Date ( );
Calendar c = Calendar.getInstance ( );
c.setTime ( d );
------------------------------------------------------------------

날짜(년/월/일/시/분/초) 구하기
------------------------------------------------------------------
import java.util.*;
import java.text.*;

SimpleDateFormat formatter = new SimpleDateFormat ( "yyyy.MM.dd HH:mm:ss", Locale.KOREA );
Date currentTime = new Date ( );
String dTime = formatter.format ( currentTime );
System.out.println ( dTime );
------------------------------------------------------------------

날짜(년/월/일/시/분/초) 구하기2
------------------------------------------------------------------
GregorianCalendar today = new GregorianCalendar ( );

int year = today.get ( today.YEAR );
int month = today.get ( today.MONTH ) + 1;
int yoil = today.get ( today.DAY_OF_MONTH );

GregorianCalendar gc = new GregorianCalendar ( );

System.out.println ( gc.get ( Calendar.YEAR ) );
System.out.println ( String.valueOf ( gc.get ( Calendar.MONTH ) + 1 ) );
System.out.println ( gc.get ( Calendar.DATE ) );
System.out.println ( gc.get ( DAY_OF_MONTH ) );
------------------------------------------------------------------

날짜(년/월/일/시/분/초) 구하기3
------------------------------------------------------------------
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.KOREA);
Calendar cal = Calendar.getInstance(Locale.KOREA);
nal = df.format(cal.getTime());
------------------------------------------------------------------

표준시간대를 지정하고 날짜를 가져오기.
------------------------------------------------------------------
TimeZone jst = TimeZone.getTimeZone ("JST");
Calendar cal = Calendar.getInstance ( jst ); // 주어진 시간대에 맞게 현재 시각으로 초기화된 GregorianCalender 객체를 반환.// 또는 Calendar now = Calendar.getInstance(Locale.KOREA);
System.out.println ( cal.get ( Calendar.YEAR ) + "년 " + ( cal.get ( Calendar.MONTH ) + 1 ) + "월 " + cal.get ( Calendar.DATE ) + "일 " + cal.get ( Calendar.HOUR_OF_DAY ) + "시 " +cal.get ( Calendar.MINUTE ) + "분 " + cal.get ( Calendar.SECOND ) + "초 " );

결과 : 2000년 8월 5일 16시 16분 47초
------------------------------------------------------------------

영어로된 날짜를 숫자로 바꾸기
------------------------------------------------------------------
Date myDate = new Date ( "Sun,5 Dec 1999 00:07:21" );
System.out.println ( myDate.getYear ( ) + "-" + myDate.getMonth ( ) + "-" + myDate.getDay ( ) );
------------------------------------------------------------------

"Sun, 5 Dec 1999 00:07:21"를 "1999-12-05"로 바꾸기
------------------------------------------------------------------
SimpleDateFormat formatter_one = new SimpleDateFormat ( "EEE, dd MMM yyyy hh:mm:ss",Locale.ENGLISH );
SimpleDateFormat formatter_two = new SimpleDateFormat ( "yyyy-MM-dd" );

String inString = "Sun, 5 Dec 1999 00:07:21";

ParsePosition pos = new ParsePosition ( 0 );
Date frmTime = formatter_one.parse ( inString, pos );
String outString = formatter_two.format ( frmTime );

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

숫자 12자리를, 다시 날짜로 변환하기
------------------------------------------------------------------
Date conFromDate = new Date();
long ttl = conFromDate.parse ( "Dec 25, 1997 10:10:10" );
System.out.println ( ttl ); //예 938291839221

Date today = new Date ( ttl );
DateFormat format = DateFormat.getDateInstance ( DateFormat.FULL,Locale.US );
String formatted = format.format ( today );
System.out.println ( formatted );
------------------------------------------------------------------

특정일로부터 n일 만큼 이동한 날짜 구하기
------------------------------------------------------------------
특정일의 시간을 long형으로 읽어온다음..
날짜*24*60*60*1000 을 계산하여.
long형에 더해줍니다.
그리고 나서 Date클래스와 Calender클래스를 이용해서 날짜와 시간을 구하면 됩니다
------------------------------------------------------------------

특정일에서 일정 기간후의 날짜 구하기2
------------------------------------------------------------------
//iDay 에 입력하신 만큼 빼거나 더한 날짜를 반환 합니다.
import java.util.*;

public String getDate ( int iDay )
{
Calendar temp=Calendar.getInstance ( );
StringBuffer sbDate=new StringBuffer ( );

temp.add ( Calendar.DAY_OF_MONTH, iDay );

int nYear = temp.get ( Calendar.YEAR );
int nMonth = temp.get ( Calendar.MONTH ) + 1;
int nDay = temp.get ( Calendar.DAY_OF_MONTH );

sbDate.append ( nYear );
if ( nMonth < 10 )
sbDate.append ( "0" );
sbDate.append ( nMonth );
if ( nDay < 10 )
sbDate.append ( "0" );
sbDate.append ( nDay );

return sbDate.toString ( );
}
------------------------------------------------------------------

현재날짜에서 2달전의 날짜를 구하기
------------------------------------------------------------------
Calendar cal = Calendar.getInstance ( );//오늘 날짜를 기준으루..
cal.add ( cal.MONTH, -2 ); //2개월 전....
System.out.println ( cal.get ( cal.YEAR ) );
System.out.println ( cal.get ( cal.MONTH ) + 1 );
System.out.println ( cal.get ( cal.DATE ) );
------------------------------------------------------------------

달에 마지막 날짜 구하기
------------------------------------------------------------------
for ( int month = 1; month <= 12; month++ )
{
GregorianCalendar cld = new GregorianCalendar ( 2001, month - 1, 1 );
System.out.println ( month + "/" + cld.getActualMaximum ( Calendar.DAY_OF_MONTH ) );
}
------------------------------------------------------------------

해당하는 달의 마지막 일 구하기
------------------------------------------------------------------
GregorianCalendar today = new GregorianCalendar ( );
int maxday = today.getActualMaximum ( ( today.DAY_OF_MONTH ) );
System.out.println ( maxday );
------------------------------------------------------------------

특정일을 입력받아 해당 월의 마지막 날짜를 구하는 간단한 예제.(달은 -1 해준다.)...윤달 30일 31일 알아오기
------------------------------------------------------------------
Calendar cal = Calendar.getInstance ( );
cal.set ( Integer.parseInt ( args[0] ), Integer.parseInt ( args [1] ) - 1, Integer.parseInt ( args [2] ) );
SimpleDateFormat dFormat = new SimpleDateFormat ( "yyyy-MM-dd" );
System.out.println ( "입력 날짜 " + dFormat.format ( cal.getTime ( ) ) );
System.out.println ( "해당 월의 마지막 일자 : " + cal.getActualMaximum ( Calendar.DATE ) );
------------------------------------------------------------------

해당월의 실제 날짜수 구하기 ( 1999년 1월달의 실제 날짜수를 구하기 )
------------------------------------------------------------------
Calendar calendar = Calendar.getInstance ( );
calendar.set ( 1999, 0, 1 );
int maxDays = calendar.getActualMaximum ( Calendar.DAY_OF_MONTH );
------------------------------------------------------------------

어제 날짜 구하기
------------------------------------------------------------------
오늘날짜를 초단위로 구해서 하루분을 빼주고 다시
셋팅해주면 쉽게 구할수 있죠..
setTime((기준일부터 오늘까지의 초를 구함) - 24*60*60)해주면 되겠죠..
------------------------------------------------------------------

어제 날짜 구하기2
------------------------------------------------------------------
import java.util.*;

public static Date getYesterday ( Date today )
{
if ( today == null )
throw new IllegalStateException ( "today is null" );
Date yesterday = new Date ( );
yesterday.setTime ( today.getTime ( ) - ( (long) 1000 * 60 * 60 * 24 ) );

return yesterday;
}
------------------------------------------------------------------

내일 날짜 구하기
------------------------------------------------------------------
Date today = new Date ( );
Date tomorrow = new Date ( today.getTime ( ) + (long) ( 1000 * 60 * 60 * 24 ) );
------------------------------------------------------------------

내일 날짜 구하기2
------------------------------------------------------------------
Calendar today = Calendar.getInstance ( );
today.add ( Calendar.DATE, 1 );
Date tomorrow = today.getTime ( );
------------------------------------------------------------------

오늘날짜에서 5일 이후 날짜를 구하기
------------------------------------------------------------------
Calendar cCal = Calendar.getInstance();
c.add(Calendar.DATE, 5);
------------------------------------------------------------------

날짜에 해당하는 요일 구하기
------------------------------------------------------------------
//DAY_OF_WEEK리턴값이 일요일(1), 월요일(2), 화요일(3) ~~ 토요일(7)을 반환합니다.
//아래 소스는 JSP일부입니다.
import java.util.*;

Calendar cal= Calendar.getInstance ( );
int day_of_week = cal.get ( Calendar.DAY_OF_WEEK );
if ( day_of_week == 1 )
m_week="일요일";
else if ( day_of_week == 2 )
m_week="월요일";
else if ( day_of_week == 3 )
m_week="화요일";
else if ( day_of_week == 4 )
m_week="수요일";
else if ( day_of_week == 5 )
m_week="목요일";
else if ( day_of_week == 6 )
m_week="금요일";
else if ( day_of_week == 7 )
m_week="토요일";

오늘은 : 입니다.
------------------------------------------------------------------

콤보박스로 선택된 날짜(예:20001023)를 통해 요일을 영문으로 가져오기
------------------------------------------------------------------
//gc.get(gc.DAY_OF_WEEK); 하면 일요일=1, 월요일=2, ..., 토요일=7이 나오니까,
//요일을 배열로 만들어서 뽑아내면 되겠죠.
GregorianCalendar gc=new GregorianCalendar ( 2000, 10 - 1 , 23 );
String [] dayOfWeek = { "", "Sun", "Mon", .... , "Sat" };
String yo_il = dayOfWeek ( gc.get ( gc.DAY_OF_WEEK ) );
------------------------------------------------------------------

두 날짜의 차이를 일수로 구하기
------------------------------------------------------------------
각각의 날짜를 Date형으로 만들어서 getTime()하면
long으로 값이 나오거든요(1970년 1월 1일 이후-맞던가?- 1/1000 초 단위로..)
그러면 이값의 차를 구해서요. (1000*60*60*24)로 나누어 보면 되겠죠.
------------------------------------------------------------------

두 날짜의 차이를 일수로 구하기2
------------------------------------------------------------------
import java.io.*;
import java.util.*;

Date today = new Date ( );
Calendar cal = Calendar.getInstance ( );
cal.setTime ( today );// 오늘로 설정.

Calendar cal2 = Calendar.getInstance ( );
cal2.set ( 2000, 3, 12 ); // 기준일로 설정. month의 경우 해당월수-1을 해줍니다.

int count = 0;
while ( !cal2.after ( cal ) )
{
count++;
cal2.add ( Calendar.DATE, 1 ); // 다음날로 바뀜

System.out.println ( cal2.get ( Calendar.YEAR ) + "년 " + ( cal2.get ( Calendar.MONTH ) + 1 ) + "월 " + cal2.get ( Calendar.DATE ) + "일" );
}

System.out.println ( "기준일로부터 " + count + "일이 지났습니다." );
------------------------------------------------------------------

두 날짜의 차이를 일수로 구하기3
------------------------------------------------------------------
import java.io.*;
import java.util.*;

public class DateDiff
{
public static int GetDifferenceOfDate ( int nYear1, int nMonth1, int nDate1, int nYear2, int nMonth2, int nDate2 )
{
Calendar cal = Calendar.getInstance ( );
int nTotalDate1 = 0, nTotalDate2 = 0, nDiffOfYear = 0, nDiffOfDay = 0;

if ( nYear1 > nYear2 )
{
for ( int i = nYear2; i < nYear1; i++ )
{
cal.set ( i, 12, 0 );
nDiffOfYear += cal.get ( Calendar.DAY_OF_YEAR );
}
nTotalDate1 += nDiffOfYear;
}
else if ( nYear1 < nYear2 )
{
for ( int i = nYear1; i < nYear2; i++ )
{
cal.set ( i, 12, 0 );
nDiffOfYear += cal.get ( Calendar.DAY_OF_YEAR );
}
nTotalDate2 += nDiffOfYear;
}

cal.set ( nYear1, nMonth1-1, nDate1 );
nDiffOfDay = cal.get ( Calendar.DAY_OF_YEAR );
nTotalDate1 += nDiffOfDay;

cal.set ( nYear2, nMonth2-1, nDate2 );
nDiffOfDay = cal.get ( Calendar.DAY_OF_YEAR );
nTotalDate2 += nDiffOfDay;

return nTotalDate1-nTotalDate2;
}

public static void main ( String args[] )
{
System.out.println ( "" + GetDifferenceOfDate (2000, 6, 15, 1999, 8, 23 ) );
}
}
------------------------------------------------------------------

파일에서 날짜정보를 가져오기
------------------------------------------------------------------
File f = new File ( directory, file );

Date date = new Date ( f.lastModified ( ) );
Calendar cal = Calendar.getInstance ( );
cal.setTime ( date );

System.out.println("Year : " + cal.get(Calendar.YEAR));
System.out.println("Month : " + (cal.get(Calendar.MONTH) + 1));
System.out.println("Day : " + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("Hours : " + cal.get(Calendar.HOUR_OF_DAY));
System.out.println("Minutes : " + cal.get(Calendar.MINUTE));
System.out.println("Second : " + cal.get(Calendar.SECOND));
------------------------------------------------------------------

날짜형식으로 2000-01-03으로 처음에 인식을 시킨후
7일씩 증가해서 1년정도의 날짜를 출력해 주고 싶은데요.
------------------------------------------------------------------
SimpleDateFormat sdf = new SimpleDateFormat ( "yyyy-mm-dd" );
Calendar c = Calendar.getInstance ( );

for ( int i = 0; i < 48; i++ )
{
c.clear ( );
c.set ( 2000, 1, 3 - ( i * 7 ) );
java.util.Date d = c.getTime ( );
String thedate = sdf.format ( d );
System.out.println ( thedate );
}
------------------------------------------------------------------

쓰레드에서 날짜 바꾸면 죽는 문제
------------------------------------------------------------------
Main화면에 날짜와시간이Display되는 JPanel이 있습니다.
date로 날짜와 시간을 변경하면 Main화면의 날짜와 시간이 Display되는 Panel에
변경된 날짜가 Display되지 않고 Main화면이 종료되어 버립니다.

문제소스:
public void run ( )
{
while ( true )
{
try{
timer.sleep ( 60000 );
}
catch ( InterruptedException ex ) { }

lblTimeDate.setText ( fGetDateTime ( ) );
repaint ( );
}
}

public String fGetDateTime ( )
{
final int millisPerHour = 60 * 60 * 1000;
String DATE_FORMAT = "yyyy / MM / dd HH:mm";
SimpleDateFormat sdf = new SimpleDateFormat ( DATE_FORMAT );
SimpleTimeZone timeZone = new SimpleTimeZone ( 9 * millisPerHour, "KST" );
sdf.setTimeZone ( timeZone );

long time = System.currentTimeMillis ( );
Date date = new Date ( time );
return sdf.format ( date );
}

해답:
// 날짜와 요일 구한다. timezone 으로 날짜를 다시 셋팅하시면 됨니다.
public String getDate ( )
{
Date now = new Date ( );
SimpleDateFormat sdf4 = new SimpleDateFormat ( "yyyy/MM/dd HH:mm EE" );
sdf4.setTimeZone ( TimeZone.getTimeZone ( "Asia/Seoul" ) );

return sdf4.format ( now );
}
------------------------------------------------------------------

날짜와 시간이 유효한지 검사하려면...?
------------------------------------------------------------------
import java.util.*;
import java.text.*;

public class DateCheck
{
boolean dateValidity = true;

DateCheck ( String dt )
{
try
{
DateFormat df = DateFormat.getDateInstance ( DateFormat.SHORT );
df.setLenient ( false );
Date dt2 = df.parse ( dt );
}
catch ( ParseException e ) { this.dateValidity = false; }
catch ( IllegalArgumentException e ) { this.dateValidity = false; }
}

public boolean datevalid ( )
{
return dateValidity;
}

public static void main ( String args [] )
{
DateCheck dc = new DateCheck ( "2001-02-28" );
System.out.println ( " 유효한 날짜 : " + dc.datevalid ( ) );
}
}
------------------------------------------------------------------

두 날짜 비교하기(아래보다 정확)
------------------------------------------------------------------
그냥 날짜 두개를 long(밀리 세컨드)형으로 비교하시면 됩니다...

이전의 데이타가 date형으로 되어 있다면, 이걸 long형으로 변환하고.
현재 날짜(시간)은 System.currentTimeMillis()메소드로 읽어들이고,
두수(long형)를 연산하여 그 결과 값으로 비교를 하시면 됩니다.

만약 그 결과값이 몇시간 혹은 며칠차이가 있는지를 계산할려면,
결과값을 Calender의 setTimeInMillis(long millis) 메소드를 이용해
설정한다음 각각의 날짜나 시간을 읽어오시면 됩니다
------------------------------------------------------------------

두 날짜 비교하기2
------------------------------------------------------------------
//Calendar를 쓸 경우 데이타의 원본을 고치기 때문에 clone()을 사용하여
//복사한 후에 그 복사본을 가지고 비교한다
import java.util.*;
import java.util.Calendar.*;
import java.text.SimpleDateFormat;

public class DayComparisonTest
{
public static void main(String args[])
{
Calendar cal = Calendar.getInstance();
SimpleDateFormat dateForm = new SimpleDateFormat("yyyy-MM-dd");

Calendar aDate = Calendar.getInstance(); // 비교하고자 하는 임의의 날짜
aDate.set(2001, 0, 1);

Calendar bDate = Calendar.getInstance(); // 이것이 시스템의 날짜

// 여기에 시,분,초를 0으로 세팅해야 before, after를 제대로 비교함
aDate.set( Calendar.HOUR_OF_DAY, 0 );
aDate.set( Calendar.MINUTE, 0 );
aDate.set( Calendar.SECOND, 0 );
aDate.set( Calendar.MILLISECOND, 0 );

bDate.set( Calendar.HOUR_OF_DAY, 0 );
bDate.set( Calendar.MINUTE, 0 );
bDate.set( Calendar.SECOND, 0 );
bDate.set( Calendar.MILLISECOND, 0 );


if (aDate.after(bDate)) // aDate가 bDate보다 클 경우 출력
System.out.println("시스템 날짜보다 뒤일 경우 aDate = " + dateForm.format(aDate.getTime()));
else if (aDate.before(bDate)) // aDate가 bDate보다 작을 경우 출력
System.out.println("시스템 날짜보다 앞일 경우 aDate = " + dateForm.format(aDate.getTime()));
else // aDate = bDate인 경우
System.out.println("같은 날이구만");
}
}

 

출처 : http://dduri.net/blog/772

2009년 7월 9일 목요일

DecimalFormat

import java.text.DecimalFormat;

class test
{
     public static void main(String[] args)
    {
         DecimalFormat dec1 = new DecimalFormat("###.000");
         DecimalFormat dec2 = new DecimalFormat("###.###");
         // 0 : 값이 없으면 그자리에 0을 출력함
         // # : 값이 없으면 출력하지 않음
         // . : 소수점을 나타낸다  
         float num=1.1f;
        System.out.println(dec1.format(num));
        System.out.println(dec2.format(num));

    }
}

--result-----------------------------------------------------------------

1.100
1.1

break Label

@break label

 

exit_For:

{

      for( int i=0 ; i<5 ; i++)

      {

             for( int j=0 ; j<5 ; j++)

            {

                 if(j==3) break exit_For;

                System.out.println("i:"+i+" j:"+j);

            }

      }

}

--result-----------------------------

1

2

 

 

2009년 7월 2일 목요일

File list

=filelist(new File("."));

public Vector filelist(File here) {
File[] rootFileList = here.listFiles();
Vector<String> filelist=new Vector<String>();
for (int i = 0; i < rootFileList.length; i++) {
if (!rootFileList[i].isDirectory()) {
String filename = rootFileList[i].getName();
String ext = filename.substring(filename.lastIndexOf("."),filename.length());
if (ext.equalsIgnoreCase(".gif") || ext.equalsIgnoreCase(".jpg")) {
filelist.addElement(filename);
System.out.println(filename);
}
}
}
return filelist;
}
public void searchDirectory(File here) {
File[] rootFileList = here.listFiles();
for (int i = 0; i < rootFileList.length; i++) {
if (rootFileList[i].isDirectory()) {
searchDirectory(rootFileList[i]);
} else {
try {
String filename = rootFileList[i].getName();
String ext = filename.substring(filename.lastIndexOf("."),filename.length());
if (!ext.equalsIgnoreCase(".gif")&& !ext.equalsIgnoreCase(".jpg")) {
System.out.println(rootFileList[i].toURL());
} else {
System.out.println(ext+"<img>");
}
} catch (Exception e) {
}
}
}
}

Enumeration

Vector vt = ......;

Enumeration en=vt.elements();
while(en.hasMoreElements())
{
....   =  (.....)en.nextElement();
}

window close

public class ....    extends Frame
{
....
{
addWindowListener(new WinEventHandler());
}

class WinEventHandler extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.out.println(e);
System.exit(0);
}
}
}

Exception

try{
...
}catch(ArithmeticException e){
System.out.println("0으로 나눌수 없음");
}catch(NumberFormatException e){
System.out.println("숫자가 아님");
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("배열의 갯수가 부족함");
}finally{
System.out.println("****finish****");
}

MediaTracker

나의 MediaTracker 사용방법은 applet에서 이미지를 불려 올때의 깨짐 방지용이다...
이미지 먼저 읽고 기다려서 다음을 처리한다..

-------------------------------------------------------------------------------
MediaTracker T;
T=new MediaTracker(this);
T.addImage(me,0); // Image me

try{
 T.waitForAll(); //다 읽을 때 까지 대기
 }catch(InterruptedException e){}

public void update(Graphics g) {
paint(g);
}
-------------------------------------------------------------------------------
//이미지가 로딩 되지 않았으면 Image Loading글짜 표시
public void paint(Graphics g) {
if ((tracker.statusAll(true) & MediaTracker.COMPLETE) != 0) {
IM = createImage(this.getWidth(), this.getHeight());
G = IM.getGraphics();

G..................;
G..................;
G..................;
G..................;
g.drawImage(IM, 0, 0, this);
} else {
g.drawString("Image Loading...", this.getWidth() / 2, this.getHeight() / 2);
}
}

Image Crop

Image ALL=getImage(this.getDocumentBase(),"all.gif");
ImageProducer PRO=ALL.getSource();
ImageFilter Filter=new CropImageFilter(1,1,17,18);

Image unit=createImage(new FilteredImageSource(PRO,Filter));

PixelGrabber

Image ALL=getImage(this.getDocumentBase(),"temp1.bmp");
int w=565;
int h=415;
        int pixels = new int[w*h];
            
            PixelGrabber pg = new PixelGrabber(ALL,0,0,w,h,pixels,0,w);
              try {
            pg.grabPixels();
       } catch (InterruptedException e) {}
       pixels = (int[])pg.getPixels() ;

int pi=pixels[me.getX()+me.getY()*w]; // me.getX(),me.getY()에 있는 색값 가져오기

Process

---RP.java-------------------------------------------------------------------------

import java.io.*;

class RP extends Thread {
 
   public static void main(String argv[])
   {
       RP k=new RP();
       k.start();

   }
   public void  run(){
       try{
           byte[]  b       =   new byte[2048];
           int     count   =   0;

           InputStream     is  =   null;
           InputStream     err  =   null;

           Runtime runt    =   Runtime.getRuntime();
           Process p       =   runt.exec("notepad rp.java");
           Process pww       =   runt.exec("notepad rp.java ");
           Process pw       =   runt.exec("notepad rp.java ");
          
           is  =   p.getInputStream();
           err  =   p.getErrorStream ();

           while((count = is.read(b, 0, b.length)) != -1) {
           System.out.print(new String(b, 0, count));
           }
           System.out.println("");
           while((count = err.read(b, 0, b.length)) != -1) {
           System.out.println("==  err    ==> " + new String(b, 0, count));
           }
           System.out.println("");
       }catch(IOException ioe){
           System.out.println(ioe);
           System.out.println("실행중 에러 발생.. ");
       }

   }

}

print

---FilePageRenderer.java-----------------------------------------------------------

import java.awt.*;
import java.awt.print.*;
import java.io.*;
import java.util.Vector;
import javax.swing.*;
public class  FilePageRenderer extends JComponent implements Printable{
private int mCurrentPage;
private Vector mLines;
private Vector mpages;
private Font mFont;
private int mFontSize;
private Dimension mPreferredSize;
public FilePageRenderer(File file,PageFormat pageFormat) throws IOException{
mFontSize=12;
mFont=new Font("serif",Font.PLAIN,mFontSize);
BufferedReader in =new BufferedReader(new FileReader(file));
String line;
mLines=new Vector();
while((line=in.readLine()) != null)
mLines.addElement(line);
in.close();
paginate(pageFormat);
}
public void paginate(PageFormat pageFormat){
mCurrentPage=0;
mpages=new Vector();
float y=mFontSize;
Vector page=new Vector();
for(int i=0; i<mLines.size(); i++){
String line=(String)mLines.elementAt(i);
page.addElement(line);
y+=mFontSize;
if(y+mFontSize*2> pageFormat.getImageableHeight()){
y=0;
mpages.addElement(page);
page=new Vector();
}
}
if(page.size()>0) mpages.addElement(page);
mPreferredSize=new Dimension((int)pageFormat.getImageableWidth(),(int)pageFormat.getImageableHeight());
repaint();
}
public void paintComponent(Graphics g){
Graphics2D g2=(Graphics2D)g;
java.awt.geom.Rectangle2D r=new java.awt.geom.Rectangle2D.Float (0,0,mPreferredSize.width,mPreferredSize.height);
g2.setPaint(Color.white);
g2.fill(r);
Vector page=(Vector ) mpages.elementAt(mCurrentPage);
g2.setFont(mFont);
g2.setPaint(Color.black);
float x=0;
float y = mFontSize;
for(int i=0; i<page.size(); i++){
String line=(String)page.elementAt(i);
if(line.length() > 0) g2.drawString (line,(int)x,(int)y);
y+=mFontSize;
}
}
public int print(Graphics g,PageFormat pageFormat, int pageIndex){
if(pageIndex>=mpages.size()) return NO_SUCH_PAGE;
int savedPage= mCurrentPage;
mCurrentPage=pageIndex;
Graphics2D g2=(Graphics2D)g;
g2.translate(pageFormat.getImageableX(),pageFormat.getImageableY());
paint(g2);
mCurrentPage=savedPage;
return PAGE_EXISTS;
}
public Dimension getPreferredSize(){
return mPreferredSize;
}
public int getCurrentPage(){
return mCurrentPage;
}
public int getNumPages(){
return mpages.size();
}
public void nextPage(){
if(mCurrentPage<mpages.size()-1)
mCurrentPage++;
repaint();
}
public void previousPage(){
if(mCurrentPage>0)
mCurrentPage--;
repaint();
}
}


---FilePrinter.java------------------------------------------------------------------

import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
import javax.swing.*;
import javax.swing.event.*;
public class FilePrinter extends JFrame{
public static void main(String [] args){
new FilePrinter();
}
private PageFormat mPageFormat;
private FilePageRenderer mPageRenderer;
private String mTitle;
public FilePrinter(){
super("FilePrint");
createUI();
PrinterJob pj=PrinterJob.getPrinterJob();
mPageFormat=pj.defaultPage();
setVisible(true);
}
protected void createUI(){
setSize(350,300);
center();
Container content=getContentPane();
content.setLayout(new BorderLayout());
JMenuBar mb=new JMenuBar();
JMenu file=new JMenu("File",true);
file.add(new FileOpenAction()).setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,Event.CTRL_MASK));
file.add(new FilePrintAction()).setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,Event.CTRL_MASK));
file.add(new FilePageSetupAction()).setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,Event.CTRL_MASK|Event.SHIFT_MASK));
file.addSeparator();
file.add(new FileQuitAction()).setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,Event.CTRL_MASK));
mb.add(file);
JMenu page=new JMenu("page",true);
page.add(new PageNextPageAction()).setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_DOWN,0));
page.add(new PagePreviousPageAction()).setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_UP,0));
mb.add(page);
setJMenuBar(mb);
getContentPane().setLayout(new BorderLayout());
addWindowListener(new WindowAdapter(){
public void WindowClosing(WindowEvent e){
System.exit(0);
}
});
}
protected void center(){
Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize=getSize();
int x=(screenSize.width-frameSize.width)/2;
int y=(screenSize.height-frameSize.height)/2;
setLocation(x,y);
}
public void showTitle(){
int currentPage=mPageRenderer.getCurrentPage()+1;
int numPages=mPageRenderer.getNumPages();
setTitle(mTitle+"-page"+currentPage+"of"+numPages);
}
public class FileOpenAction extends AbstractAction{
public FileOpenAction(){super("open...");}
public void actionPerformed(ActionEvent ae){
JFileChooser fc=new JFileChooser(".");
int result=fc.showOpenDialog(FilePrinter.this);
if(result !=0){return;}
java.io.File f= fc.getSelectedFile();
if(f==null){return;}
try{
mPageRenderer=new FilePageRenderer (f,mPageFormat);
mTitle="["+f.getName()+"]";
showTitle();
JScrollPane jsp=new JScrollPane(mPageRenderer);
getContentPane().removeAll();
getContentPane().add(jsp,BorderLayout.CENTER);
validate();
}catch(java.io.IOException ioe){
System.out.println(ioe);
}
}
}
public class FilePrintAction extends AbstractAction{
public FilePrintAction(){super("print");}
public void actionPerformed(ActionEvent ae){
PrinterJob pj= PrinterJob.getPrinterJob();
pj.setPrintable(mPageRenderer,mPageFormat);
if(pj.printDialog()){
try{pj.print();}
catch(PrinterException e) {
System.out.println(e);
}
}
}
}

public class FilePageSetupAction extends AbstractAction{
public FilePageSetupAction() {super("page setup...");}
public void actionPerformed(ActionEvent ae){
PrinterJob pj=PrinterJob.getPrinterJob();
mPageFormat=pj.pageDialog(mPageFormat);
if(mPageRenderer !=null){
mPageRenderer.paginate(mPageFormat);
showTitle();
}
}
}
public class FileQuitAction extends AbstractAction{
public FileQuitAction() {super("quit");}
public void actionPerformed(ActionEvent ae){
System.exit(0);
}
}
public class PageNextPageAction extends AbstractAction{
public PageNextPageAction(){super("Nextpage");}
public void actionPerformed(ActionEvent ae){
if(mPageRenderer!=null) mPageRenderer.nextPage();
showTitle();
}
}
public class PagePreviousPageAction extends AbstractAction{
public PagePreviousPageAction() {super("previoue page");}
public void actionPerformed(ActionEvent ae){
if(mPageRenderer !=null) mPageRenderer.previousPage();
showTitle();
}
}
}

2009년 6월 29일 월요일

3D 간단 구현

http://namsuck.cafe24.com/projects/3d/g3d.html

3D구현을 위해 한동안 만지던 소스이다..
버그도 있고 하지만...
나중에 개발자료로 쓰기 위해서 올려 두었다.. 실행시 클릭후... 방향키로 조정 할 수 있다

- 양 남 석 -
 

최단거리(미완성)

http://namsuck.cafe24.com/projects/theLeastDistance/theLeastDistance.html

Djikstra's algorithm (named after its discover, E.W. Dijkstra) solves the problem of finding the shortest path from a point in a graph (the source) to a destination. It turns out that one can find the shortest paths from a given source to all points in a graph in the same time, hence this problem is sometimes called the single-source shortest paths problem.


Djikstra's algorithm을 이용해 구현해 놓은 소스이다..
아직 UI나 예외처리가 부족하다             
-양 남 석-