java各種文件(xml、properties、txt)處理操作的一道題目

一、             概述:存儲員工的xml文件過多且內容無規律,爲了方便簡單的查看,要將xml中的內容按要求分開寫入txt文件中,並打包歸檔。

 

二、             目標概述:分析staff_.zipxml,將符合要求(見三)的員工數據按規定(見四)寫入txt文件,將多個輸出文件打包爲staff_select.zipDB記錄生成zip的路徑和時間YYYY:mm:dd HH:mm:ss

 

staff_.zip中employees.xml的樣例:

<employees>
	<!--Employee Xml Catalog-->
	<employee name="FHK ZY#E" number="65253008">
		<public>
			<department>PRM</department>
			<group>PRM 7</group>
		</public>
		<individual>
			<name>FHK ZY#E</name>
			<number>65253008</number>
			<gender>Male</gender>
			<age>91</age>
			<phoneno>160296718242</phoneno>
			<workexperience>7</workexperience>
		</individual>
	</employee>
	<employee name="RHUZJJAE" number="25904879">
		<public>
			<department>OCS</department>
			<group>OCS 1</group>
		</public>
		<individual>
			<name>RHUZJJAE</name>
			<number>25904879</number>
			<gender>Male</gender>
			<age>81</age>
			<phoneno>697165507224</phoneno>
			<workexperience>4</workexperience>
		</individual>
	</employee>
	<employee name="JVPS#M X" number="88536762">
		<public>
			<department>Human Resources</department>
			<group>Human Resources 6</group>
		</public>
		<individual>
			<name>JVPS#M X</name>
			<number>88536762</number>
			<gender>Male</gender>
			<age>81</age>
			<phoneno>682619863271</phoneno>
			<workexperience>3</workexperience>
		</individual>
	</employee>
</employees>


 

jdbc.properties:

driverClassName=oracle.jdbc.xa.client.OracleXADataSource
url=jdbc:oracle:thin:@127.0.0.1:1521:ibss
userName=ibss
password=ibss
maxSize=10
minSize=8
idleTimeout=10
checkOutTimeout=10000
testsql=select count(*) from dual
checkAfterUsed=true
isSameRM=false


invalidCondition.properties:

#name validation
origName=$,#,&
targName=*
#age validation
minAge=18
maxAge=38
#gender validation
gender=Other

 

三、             Xml解析要求xml中數據有些不符合要求,

1、要根據invalidCondition.properties文件中的條件過濾篩選符合要求(有效)的員工,不符合要求的員工信息不寫入txt文件中。

#name validation(員工姓名中含有 #$&的要將其轉換爲*)

origName=$,#,&

targName=*

#age validation(年齡小於18大於48的員工不合法)

minAge=18

maxAge=48

#gender validation(性別爲Other的員工不合法)

gender=Other

 

2、員工工號相同情況不考慮

 

3、員工姓名去前後空格

 

四、            txt格式要求:

1、     txt文件名:“部門名”(該txt內員工數據均爲文件名所示部門的員工)。

2、     txt文件格式:員工按部門組(從小到大)順序排列

#Department:CRM(部門總人數:部門有效人數)

 

deptGroup=0

staffNo=*****

staffName=*****

staffGender=*****

staffAge=*****

phoneNumber=*****

workExp=***** Year(Years)

#-------------------------

 

五、            歸檔要求(可選功能)

讀取jdbc中的參數,連接數據庫,記錄文件生成時間和路徑,表(EMPLOYEE_ZIP)結構:

CreateTime VarChar2(1024)

ZipPath     Varchar2(1024)

 

 

六、            提交要求:

自己創建工程,工程目錄結構自定義,完成試題後將整個工程目錄壓縮爲:

“姓名_.zip”發給xxx 

 

七、            java代碼實現:

 

1、元數據bean類:

package nju.syy.vo;

import java.util.ArrayList;

public class EmployeeBean {

	private String name;
	private String number;
	private String department;
	private String group;
	private String gender;
	private String age;
	private String phoneno;
	private String workExperience;
	private static ArrayList<EmployeeBean> employeeList = new ArrayList<EmployeeBean>();
	
	public EmployeeBean employeeBean;

	public EmployeeBean(EmployeeBean eb) {
		this.employeeBean = eb;
	}

	public EmployeeBean() {
		// TODO Auto-generated constructor stub
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getNumber() {
		return number;
	}

	public void setNumber(String number) {
		this.number = number;
	}

	public String getDepartment() {
		return department;
	}

	public void setDepartment(String department) {
		this.department = department;
	}

	public String getGroup() {
		return group;
	}

	public void setGroup(String group) {
		this.group = group;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public String getPhoneno() {
		return phoneno;
	}

	public void setPhoneno(String phoneno) {
		this.phoneno = phoneno;
	}

	public String getWorkExperience() {
		return workExperience;
	}

	public void setWorkExperience(String workExperience) {
		this.workExperience = workExperience;
	}

	public EmployeeBean getEmployeeBean() {
		return employeeBean;
	}

	public void setEmployeeBean(EmployeeBean employeeBean) {
		this.employeeBean = employeeBean;
	}

	public ArrayList<EmployeeBean> getEmployeeList() {
		return employeeList;
	}

	@SuppressWarnings("static-access")
	public void setEmployeeList(ArrayList<EmployeeBean> employeeList) {
		this.employeeList = employeeList;
	}

}


 2、控制service類:

package nju.syy.service;

import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;

import nju.syy.util.OralceConnect;
import nju.syy.util.PropertiesUtil;
import nju.syy.util.TxtUtil;
import nju.syy.util.ZipUtil;
import nju.syy.vo.EmployeeBean;


public class EmloyeeHandle {

	ArrayList<EmployeeBean> employeeList = new ArrayList<EmployeeBean>();
	Map<String, Integer> countMap = new HashMap<String, Integer>();
	PropertiesUtil pu = new PropertiesUtil();
	Map<String, String> propertiesMap = pu
			.readTxtFormatProperties("invalidCondition.properties");

	public Map<String, Integer> getCountMap(){
		return countMap;
	}
	
	private void readXMLFile(String zipFile) {

		ZipUtil zipUtil = new ZipUtil();
		employeeList = zipUtil.unZipFile(zipFile);
	}

	public void writeToTxtFile() {
		TxtUtil tu = new TxtUtil();
		tu.writeToTxtFile(employeeList);
	}

	public boolean isValidEmployee(EmployeeBean eb) {

		int age = Integer.parseInt(eb.getAge());
		int minAge = Integer.parseInt(propertiesMap.get("minAge"));
		int maxAge = Integer.parseInt(propertiesMap.get("maxAge"));
		if ((eb.getGender() .equals(propertiesMap.get("gender")) ) || (age < minAge)
				|| (age > maxAge))
			return false;
		else
			return true;
	}

	public void transfer(EmployeeBean eb) {

		String origName = propertiesMap.get("origName");
		String targName = propertiesMap.get("targName");
		String[] origNames = origName.split(",");
		String pattern = new String();
		for (String str : origNames) {
			pattern += (str + "|");
		}

		eb.setName(eb.getName().replaceAll("[" + pattern + "]", targName));
	}

	/**
	 * 分組
	 * 
	 * @param employeeList
	 */
	public Map<String, LinkedList<EmployeeBean>> grouped(
			ArrayList<EmployeeBean> employeeList) {
		
		Map<String, LinkedList<EmployeeBean>> employeeGroupMap = new HashMap<String, LinkedList<EmployeeBean>>();
		EmloyeeHandle eh = new EmloyeeHandle();
		
		for (EmployeeBean eb : employeeList) {
			
			LinkedList<EmployeeBean> ebList;
			String department = eb.getDepartment();

			if (employeeGroupMap.containsKey(department)) {
				countMap.put(department, countMap.get(department) + 1);

				if (eh.isValidEmployee(eb)) {
					eh.transfer(eb);
					ebList = employeeGroupMap.get(department);
					addUpSort(eb, ebList);
					employeeGroupMap.put(department, ebList);
				}
				
			} else {
				countMap.put(department, 1);
				ebList = new LinkedList<EmployeeBean>();
				employeeGroupMap.put(department, ebList);
				if (eh.isValidEmployee(eb)) {
					eh.transfer(eb);
					addUpSort(eb, ebList);
				}
				
			}
		}
		
		for(java.util.Iterator<Entry<String, Integer>> iterator = countMap.entrySet().iterator(); iterator.hasNext();){
			Entry<String, Integer> entry = iterator.next();
			String key = entry.getKey();
			Integer count = entry.getValue();
			
			System.out.println("Department: " + key + ", count: " + count);
		}
		return employeeGroupMap;
	}

	/**
	 * 升序算法含義: 1、首先判斷新增元素和元素集合不能爲null; 2、判斷元素集合是否爲空,如果爲空則將當前新增元素插入到鏈表的表頭
	 * 3、如果不是第二種情況則需要遍歷整個鏈表,查看是否有已存在元素比當前新增元素大, 如果有則將當前元素插入到已存在元素的位置
	 * 4、如果遍歷到最後一個位置沒有比當前新增元素大,那麼就將新增元素插入到鏈表的最後一個位置
	 * 
	 */

	@SuppressWarnings("unused")
	public void addUpSort(EmployeeBean eb, LinkedList<EmployeeBean> ebList) {

		String curGroup = eb.getGroup();
		String[] str = curGroup.split(" ");
		int curGroupNo = Integer.parseInt(str[str.length - 1]);

		if (eb == null) {
			try {
				throw new Exception("插入元素爲null");
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (ebList == null) {
			try {
				throw new Exception("元素集合爲null");
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (ebList.size() == 0) {
			ebList.add(eb);
		} else {
			String firstGroup = ebList.getFirst().getGroup();
			String[] str1 = firstGroup.split(" ");
			int firstGroupNo = Integer.parseInt(str1[str1.length - 1]);
			if (curGroupNo < firstGroupNo) {
				ebList.addFirst(eb);
			} else {
				boolean insertFlag = false;
				for (EmployeeBean e : ebList) {
					String group = e.getGroup();
					String[] str2 = group.split(" ");
					int groupNo = Integer.parseInt(str2[str2.length - 1]);
					if (curGroupNo < groupNo) {
						int index = ebList.indexOf(e);
						ebList.add(index, eb);
						insertFlag = true;
						break;
					}
				}
				if (!insertFlag) {
					ebList.addLast(eb);
				}
			}
		}
	}

	/**
	 * 保存生成zip的路徑和時間到DB
	 */
	public void save(){
		
		OralceConnect oralceConnect = new OralceConnect();
		Connection conn = oralceConnect.connectToOracle();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		String directory = System.getProperty("user.dir");
		File file =new File(directory + "\\staff_select.zip");
		
        Long time =file.lastModified();
        Calendar cd = Calendar.getInstance();
        cd.setTimeInMillis(time);
        System.out.println(cd.getTime());
        try
		{
			pstmt = conn.prepareStatement("INSERT INTO EMPLOYEE_ZIP (CreateTime, ZipPath) VALUES ('" + cd.getTime() + "', '"+file.getAbsolutePath() + "')");
			
			rs = pstmt.executeQuery();
			
			System.out.println("數據庫操作成功!");
			
		}catch(SQLException e){
			System.out.println("數據庫操作異常!" + e.getMessage());
		}
		finally{
			try{
				if(rs!= null){rs.close();}
				if(pstmt!= null){pstmt.close();}
				if(conn != null && !conn.isClosed()){conn.close();}
			}catch(SQLException e){
				e.printStackTrace();
			}
			
		}
	}
	
	public static void main(String[] args) {
		EmloyeeHandle emloyeeHandle = new EmloyeeHandle();

		ZipUtil zu = new ZipUtil();
		emloyeeHandle.readXMLFile("staff_.zip");
		emloyeeHandle.writeToTxtFile();

		String directory = System.getProperty("user.dir");
		try {
			zu.zip(directory + "\\staff_select");// 要壓縮的文件夾
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		emloyeeHandle.save();
	}
}



 3、工具util類:

package nju.syy.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Map;

public class OralceConnect {

	/**
	 * @param args
	 */
	public Connection connectToOracle() {
		
		PropertiesUtil pu = new PropertiesUtil();
		Map<String, String> propertiesMap = pu
				.readJdbcProperties("jdbc.properties");
		
		Connection conn = null;  //Connection數據庫連接對象
		
		try {
			// 註冊驅動
//			Class.forName(propertiesMap.get("driverClassName"));
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection(propertiesMap.get("url"), propertiesMap.get("userName"), propertiesMap.get("password"));
			
			return conn;

		} catch (ClassNotFoundException e) {
			System.out.println("驅動類沒有找到!");
		} catch(SQLException e){
			System.out.println("獲得Connection數據庫連接對象出錯!!");
		 e.printStackTrace(); 
		}
		
		return conn;
	}
}


 

package nju.syy.util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class PropertiesUtil {

	public Properties parserProperties(String propertiesFileName) {

		FileInputStream filein;
		Properties p = new Properties();
		try {
			filein = new FileInputStream(propertiesFileName);
			try {
				p.load(filein);
				return p;
			} catch (IOException e) {
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
		return p;
	}
	/**
	 * 讀提txt文件的配置文檔
	 * @param propertiesFileName
	 * @return
	 */
	public Map<String, String> readTxtFormatProperties(String propertiesFileName) {

		Map<String, String> propertiesMap = new HashMap<String, String>();

		Properties p = parserProperties(propertiesFileName);
		
		propertiesMap.put("origName", p.getProperty("origName"));
		propertiesMap.put("targName", p.getProperty("targName"));
		propertiesMap.put("minAge", p.getProperty("minAge"));
		propertiesMap.put("maxAge", p.getProperty("maxAge"));
		propertiesMap.put("gender", p.getProperty("gender"));

		return propertiesMap;
	}
	
	/**
	 * 讀jdbc的配置文檔
	 * @param propertiesFileName
	 * @return
	 */
	public Map<String, String> readJdbcProperties(String propertiesFileName) {

		Map<String, String> propertiesMap = new HashMap<String, String>();

		Properties p = parserProperties(propertiesFileName);
		
		propertiesMap.put("driverClassName", p.getProperty("driverClassName"));
		propertiesMap.put("url", p.getProperty("url"));
		propertiesMap.put("userName", p.getProperty("userName"));
		propertiesMap.put("password", p.getProperty("password"));
		propertiesMap.put("maxSize", p.getProperty("maxSize"));
		propertiesMap.put("minSize", p.getProperty("minSize"));
		propertiesMap.put("idleTimeout", p.getProperty("idleTimeout"));
		propertiesMap.put("checkOutTimeout", p.getProperty("checkOutTimeout"));
		propertiesMap.put("testsql", p.getProperty("testsql"));
		propertiesMap.put("checkAfterUsed", p.getProperty("checkAfterUsed"));
		propertiesMap.put("isSameRM", p.getProperty("isSameRM"));
		
		return propertiesMap;
	}
	
	public static void main(String[] arg){
		PropertiesUtil pu = new PropertiesUtil();
		Map<String, String> propertiesMap = pu
				.readJdbcProperties("jdbc.properties");
		System.out.println(propertiesMap.get("driverClassName"));
	}
}


 

package nju.syy.util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import nju.syy.service.EmloyeeHandle;
import nju.syy.vo.EmployeeBean;


public class TxtUtil {

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void writeToTxtFile(ArrayList<EmployeeBean> employeeList) {
		try {

			EmloyeeHandle eh = new EmloyeeHandle();
			Map<String, LinkedList<EmployeeBean>> employeeGroupMap = eh
					.grouped(employeeList);
			
			Map<String, Integer> countMap = eh.getCountMap();
			
			for (Iterator iterator = employeeGroupMap.entrySet().iterator(); iterator
					.hasNext();) {

				Map.Entry entry = (Map.Entry) iterator.next();
				String key = (String) entry.getKey();
				LinkedList<EmployeeBean> ebList = (LinkedList<EmployeeBean>) entry
						.getValue();

				String directory = System.getProperty("user.dir");
				File staff_select_File = new File(directory + "\\staff_select");
				staff_select_File.mkdir();
				
				BufferedWriter bw = new BufferedWriter(new FileWriter(new File(
						staff_select_File.getCanonicalPath() + "\\" + key + ".txt")));
				StringBuffer bf = new StringBuffer();

				bf.append("#Department:" + key + "(" + countMap.get(key) + " : " + ebList.size() + ")" + "\r\n" + "\r\n");

				for (Iterator i = ebList.iterator(); i.hasNext();) {

					EmployeeBean eb = (EmployeeBean) i.next();
					String gourp = eb.getGroup();
					String[] strs = gourp.split(" ");
					String groupNo = strs[strs.length - 1];
					
					bf.append("deptGroup=" + groupNo + "\r\n");
					bf.append("staffNo=" + eb.getNumber() + "\r\n");
					bf.append("staffName=" + eb.getName() + "\r\n");
					bf.append("staffGender=" + eb.getGender() + "\r\n");
					bf.append("staffAge=" + eb.getAge() + "\r\n");
					bf.append("phoneNumber=" + eb.getPhoneno() + "\r\n");
					bf.append("workExp=" + eb.getWorkExperience()
							+ " Year(Years)" + "\r\n"
							+ "#-------------------------" + "\r\n");
				}
				bw.append(bf);
				bw.flush();
				bw.close();
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}

	}

	public void zipFile(String zipFileName) throws IOException {

		// 1. 創建zip輸出流
		ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(
				zipFileName));

		// 2. 創建並設置條目信息
		File f = new File("javaio.bmp");
		ZipEntry ze = new ZipEntry(f.getName());
		ze.setComment("Hello, Zip");
		ze.setSize(f.length());
		ze.setTime(f.lastModified());
		
		// 3. 添加條目到輸出流
		zos.putNextEntry(ze);

		// 4. 輸出
		FileInputStream fin = new FileInputStream(f);
		byte[] buffer = new byte[4096];
		int len;
		while ((len = fin.read(buffer)) != -1) {
			zos.write(buffer, 0, len);
		}
		fin.close();

		// 5. 關閉流
		zos.close();
	}

}


 

package nju.syy.util;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;

import nju.syy.vo.EmployeeBean;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


/**
 * 
 * @author hongliang.dinghl Dom4j 生成XML文檔與解析XML文檔
 */
public class XMLUtil {

	public ArrayList<EmployeeBean> parserXml(InputStream inputStream) {
		
		EmployeeBean employeeBean = new EmployeeBean();

		SAXReader saxReader = new SAXReader();
		try {
			
			Document document = saxReader.read(inputStream);
			Element employees = document.getRootElement();
			
			for (Iterator<?> i = employees.elementIterator(); i.hasNext();) {
				EmployeeBean eb = new EmployeeBean();
				Element employee = (Element) i.next();

				// 取employee的姓名屬性
				eb.setName(employee.attributeValue("name"));
				
				// 取employee的編號屬性
				eb.setNumber(employee.attributeValue("number"));
				
				Iterator<?> j = employee.elementIterator();

				Element publics = (Element) j.next();

				// 取"部門"元素
				Iterator<?> i_publics = publics.elementIterator();
				Element department = (Element) i_publics.next();
				eb.setDepartment(department.getTextTrim());
				
				// 取"小組"元素
				Element group = (Element) i_publics.next();
				eb.setGroup(group.getTextTrim());
				
				// -----------------------------------------------------------------
				// 取"個人信息"元素
				Element individuals = (Element) j.next();

				// 取"性別"元素
				Iterator<?> i_individuals = individuals.elementIterator();
				i_individuals.next();
				i_individuals.next();
				Element gender = (Element) i_individuals.next();
				eb.setGender(gender.getTextTrim());
				
				// 取"年齡"元素
				Element age = (Element) i_individuals.next();
				eb.setAge(age.getTextTrim());

				// 取"電話號碼"元素
				Element phoneno = (Element) i_individuals.next();
				eb.setPhoneno(phoneno.getTextTrim());

				// 取"工作經驗"元素
				Element workexperience = (Element) i_individuals.next();
				eb.setWorkExperience(workexperience.getTextTrim());

				employeeBean.getEmployeeList().add(eb);
			}

		} catch (DocumentException e) {
			System.out.println(e.getMessage());
		}
//		System.out.println(employeeBean.getEmployeeList().size());
		return employeeBean.getEmployeeList();
	}

}


 

package nju.syy.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

import nju.syy.vo.EmployeeBean;


public class ZipUtil {

	ArrayList<EmployeeBean> employeeList = new ArrayList<EmployeeBean>();
	XMLUtil xu = new XMLUtil();

	/**
	 * 依次讀取壓縮包中各文件內容
	 * 
	 * @param file
	 */
	@SuppressWarnings("unchecked")
	public ArrayList<EmployeeBean> unZipFile(String zipFileName) {

		try {
			// 由指定的File對象打開供閱讀的ZIP文件
			ZipFile zip = new ZipFile(new File(zipFileName));

			// 獲取zip文件中的各條目(子文件)
			Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zip
					.entries();

			// 依次訪問各條目
			while (entries.hasMoreElements()) {
				
				ZipEntry ze = (ZipEntry) entries.nextElement();

				employeeList = xu.parserXml(zip.getInputStream(ze));
			}
		} catch (ZipException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return employeeList;
	}

	/**
	 * 依次將txt文件壓縮到staff_select.zip文件中
	 * 
	 * @param file
	 */
	public void zip(String inputFileName) throws Exception {
		String directory = System.getProperty("user.dir");
		String zipFileName = directory + "\\staff_select.zip"; // 打包後文件名字
//		System.out.println(zipFileName);
		zip(zipFileName, new File(inputFileName));
	}

	private void zip(String zipFileName, File inputFile) throws Exception {
		ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
				zipFileName));
		zip(out, inputFile, "");
		out.close();
	}

	private void zip(ZipOutputStream out, File f, String base) throws Exception {
		
		if (f.isDirectory()) {
			File[] fl = f.listFiles();
			out.putNextEntry(new ZipEntry(base + "/"));
			base = base.length() == 0 ? "" : base + "/";
			for (int i = 0; i < fl.length; i++) {
				zip(out, fl[i], base + fl[i].getName());
			}
		} else {
			out.putNextEntry(new ZipEntry(base));
			FileInputStream in = new FileInputStream(f);
			int b;
			while ((b = in.read()) != -1) {
				out.write(b);
			}
			in.close();
		}
	}
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章