Java/I_O
io와 swing 활용 : 이미지파일 카피
krvision
2011. 12. 11. 22:24
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import java.io.*; public class JTextFieldDemo extends JFrame implements ActionListener { JTextField tf1, tf2; JButton bt; JLabel res; JProgressBar pb; JPasswordField pwd; public JTextFieldDemo() { super(":::JTextFieldDemo:::"); makeGui(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }//생성자---------- public void makeGui() { Container cp=getContentPane(); cp.setLayout(new GridLayout(0,1));//행은 가변적, 열은 1열로 고정 tf1=new JTextField(); tf2=new JTextField(); cp.add(tf1); cp.add(tf2); //프로그래스바 생성 및 부착 pb=new JProgressBar(); cp.add(pb); pb.setStringPainted(true); bt=new JButton("COPY", new ImageIcon("./img/img06.gif")); cp.add(bt); ImageIcon ic=new ImageIcon("./img/img05.gif"); res=new JLabel("결과",ic,JLabel.CENTER); JScrollPane sp=new JScrollPane(res);//라벨에 스크롤바를 붙인다 cp.add(sp); tf1.setBorder(new TitledBorder("원본파일(이미지파일)")); tf2.setBorder(new TitledBorder("목적파일")); bt.addActionListener(this); }//---------- public void actionPerformed(ActionEvent e) { Object o=e.getSource(); if(o==bt) { //fileCopy(); Thread tr=new MyThread(); tr.start(); } }//---------- class MyThread extends Thread { public void run() { fileCopy(); } }///////////////// public void fileCopy() { FileInputStream fis=null; FileOutputStream fos=null; BufferedInputStream bis=null; BufferedOutputStream bos=null; //./img/img01.gif를 ./img/target.gif로 복사해 보자 try { String source=tf1.getText().trim(); String target=tf2.getText().trim(); File sourceFile=new File(source); File targetFile=new File(target); //스트림 연결해서 읽고 쓰고 하자. fis =new FileInputStream(sourceFile); bis =new BufferedInputStream(fis); fos =new FileOutputStream(targetFile); bos =new BufferedOutputStream(fos); int n=0; int count=0; long filesize=sourceFile.length();//파일크기 byte ba[]=new byte[1024]; //배열에 담아서 읽어들임 while ((n=bis.read(ba)) != -1) { count +=n;//읽은 바이트수, 프로그래스바에 설정 //int per=(읽은바이트수/전체파일크기)*100 pb.setValue(count); long per=(count*100/filesize); pb.setString ((int)(pb.getPercentComplete()*100)+" % 진행"); bos.write(ba,0,n); bos.flush(); try { Thread.sleep(100);//0.1초 슬립 } catch (Exception e) { e.printStackTrace(); } }//while--- bis.close(); bos.close(); fis.close(); fos.close(); //라벨의 아이콘 변경 작업..... ImageIcon i=new ImageIcon(target); res.setIcon(i); } catch (IOException e) { JOptionPane.showMessageDialog(this,e.getMessage()); } }//fileCopy()------- public static void main(String[] args) { JTextFieldDemo jfc=new JTextFieldDemo(); jfc.setSize(300,400); jfc.setVisible(true); } }