import org.apache.commons.io.IOUtils;

private void copy(File source, File target){
		try {
			in = new FileInputStream(source);
			out = new FileOutputStream(target, true);
		
        	IOUtils.copy(in, out);
        	
        } catch (IOException ex) {
        	ex.printStackTrace();
        	
        } finally {
        	IOUtils.closeQuietly(in);
            IOUtils.closeQuietly(out);
        }
}

FileOutputStream의 생성자 중 두번째 인자는 append 여부.






InputSource is = new InputSource(new InputStreamReader(new FileInputStream("test.xml"), "UTF-8"));

이렇게 하지 않으면 Element를 통해 읽어 들일때 end tag를 인식하지 못해 에러난다.

 
대략적 전체 코드. 
		try {
			User user = null;
			InputSource is = new InputSource(new InputStreamReader(new FileInputStream(file), "UTF-8"));
			
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
			DocumentBuilder db = dbf.newDocumentBuilder();

			if(file != null){
				Document doc = db.parse(is);
				doc.getDocumentElement().normalize();
				NodeList nodeLst = doc.getElementsByTagName("client");
				user = new User();
				for (int s = 0; s < nodeLst.getLength(); s++) {
					Node fstNode = nodeLst.item(s);
					if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
						Element fstElmnt = (Element) fstNode;

						fstNmElmntLst = fstElmnt.getElementsByTagName("name");
						fstNmElmnt = (Element) fstNmElmntLst.item(0);
						fstNm = fstNmElmnt.getChildNodes();
						user.setUserName(((Node) fstNm.item(0)).getNodeValue());

						fstNmElmntLst = fstElmnt.getElementsByTagName("id");
						fstNmElmnt = (Element) fstNmElmntLst.item(0);
						fstNm = fstNmElmnt.getChildNodes();
						user.setUserId(((Node) fstNm.item(0)).getNodeValue());

						fstNmElmntLst = fstElmnt.getElementsByTagName("pass");
						fstNmElmnt = (Element) fstNmElmntLst.item(0);
						fstNm = fstNmElmnt.getChildNodes();
						String pw = CipherFactory.getCipher().hashWithKey(user.getUserId(), ((Node) fstNm.item(0)).getNodeValue());
						user.setUserPw(pw);

						fstNmElmntLst = fstElmnt.getElementsByTagName("category");
						fstNmElmnt = (Element) fstNmElmntLst.item(0);
						fstNm = fstNmElmnt.getChildNodes();
						user.setCategoryNo(((Node) fstNm.item(0)).getNodeValue());

						fstNmElmntLst = fstElmnt.getElementsByTagName("role");
						fstNmElmnt = (Element) fstNmElmntLst.item(0);
						fstNm = fstNmElmnt.getChildNodes();

					}
				}
			}

		} catch (ParserConfigurationException e) {
			e.printStackTrace();
			logger.error(e);
		} catch (SAXException e) {
			e.printStackTrace();
			logger.error(e);
		} catch (IOException e) {
			e.printStackTrace();
			logger.error(e);
		} catch (InvalidKeyException e) {
			e.printStackTrace();
			logger.error(e);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
			logger.error(e);
		}






윈도우 서버에서는 보안상 직접적으로 네트워크 드라이브 접근이 허용되지 않는다.

Apache의 Alias를 이용하거나 UNC를 이용해서 접근하거나.. 해야하는데 정말 잘 되지 않더라..

그래서 찾던 도중에 발견한것이 jCIFS - 

  - http://jcifs.samba.org/
  - http://blog.bensmann.com/adding-jcifs-to-javaiofile-for-easy-access-to
  - http://blog.naver.com/ugigi/70088495064

대충 위 사이트 살펴보고 -

jcifs-1.3.14.jar 다운받아 classpath에 넣어주고 - 

시간 관계상 소스만 아래에 던진다.
	String url = "smb://{ip};{user}:{pw}@{ip}/{drive}/{path}/{filename}"
	SmbFile file = new SmbFile(url);
	SmbRandomAccessFile rf = new SmbRandomAccessFile(file, "r");
	byte[] b = new byte[10000];
	int n;
	while(( n = rf.read( b )) > 0 ) {
		System.out.write(b, 0, n);
	}


일반적인 java.util.IO 클래스들 처럼 사용할 수 있다.
단 아쉬운것은 RandomAccessFile에 있는 Chanel이 없어 read() 해야한다는 건데 이는 직접 구현해야한다.
API도 제공하고 있으니 사용하는데 무리는 없었다.

난 Collection을 사용할때 항상 Generic 타입으로 객체를 생성하려한다.
이유야 generic을 사용하면 좀 간편해지니 (캐스팅을 할 필요도 없고..)

이유야 어쨋든 하이버 네이트에서도 제네릭을 붙여보았는데 ..


  1. Session session = getHibernateTemplate().getSessionFactory().openSession();
  2.  
  3. Criteria crit = session.createCriteria(Member.class);
  4. crit.add(Expression.eq("userId", member.getUserId()));
  5. crit.add(Expression.eq("userPw", member.getUserPw()));
  6.  
  7. List<Member> list = crit.list();

난 이게 될 줄 알았다. 정말 진짜...
심심풀이 만들어보고 있는데 이상하게 유저가 존재하는데도 session을 생성하려고하면 null을 뱉어내니 환장하는 수 밖에..

별 수단 다 써보다가 설마 싶어서 <Member>를 지우고 찍어보니.. 객체 주소가 찍히네...

그래서 도달한 결론은 7번 라인처럼 generic을 이용하여도 -
crit.list()를 하게 되면 return 되는 값들은 Object 형이므로 무조건 class Casting을 하여야 한다.

Membe rmember = (Member) list.get(0);

이렇게...  하면 틀린거고;;

http://yeory.tistory.com/46 여기를 참고하세요..

이글은 무식 인증 글임 ㅋ

+ Recent posts