不知道是否理解對了你的意思,大概寫了一下:
十余年專注成都網站制作,成都企業(yè)網站定制,個人網站制作服務,為大家分享網站制作知識、方案,網站設計流程、步驟,成功服務上千家企業(yè)。為您提供網站建設,網站制作,網頁設計及定制高端網站建設服務,專注于成都企業(yè)網站定制,高端網頁制作,對服務器托管等多個方面,擁有豐富的網站建設經驗。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.io.StringWriter;
public class FileReadAndWrite {
private static final int DEFAULT_BUFFER_SIZE = 1024;
public static void main(String[] args) {
File file = new File("E:/workspace/FileIOTest/src/a.txt");
String str = file2String(file, "UTF-8");
str = str.replace('d', 'f');
string2File(str,"E:/workspace/FileIOTest/src/b.txt");
System.out.println("處理完畢");
}
/**
* 文本文件轉換為指定編碼的字符串
*
* @param file
* 文本文件
* @param encoding
* 編碼類型
* @return 轉換后的字符串
* @throws IOException
*/
public static String file2String(File file, String encoding) {
InputStreamReader reader = null;
StringWriter writer = new StringWriter();
try {
if (encoding == null || "".equals(encoding.trim())) {
reader = new InputStreamReader(new FileInputStream(file),
encoding);
} else {
reader = new InputStreamReader(new FileInputStream(file));
}
// 將輸入流寫入輸出流
char[] buffer = new char[DEFAULT_BUFFER_SIZE];
int n = 0;
while (-1 != (n = reader.read(buffer))) {
writer.write(buffer, 0, n);
}
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (reader != null)
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 返回轉換結果
if (writer != null)
return writer.toString();
else
return null;
}
/**
* 將字符串寫入指定文件(當指定的父路徑中文件夾不存在時,會最大限度去創(chuàng)建,以保證保存成功!)
*
* @param res
* 原字符串
* @param filePath
* 文件路徑
* @return 成功標記
*/
public static boolean string2File(String res, String filePath) {
boolean flag = true;
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
try {
File distFile = new File(filePath);
if (!distFile.getParentFile().exists())
distFile.getParentFile().mkdirs();
bufferedReader = new BufferedReader(new StringReader(res));
bufferedWriter = new BufferedWriter(new FileWriter(distFile));
char buf[] = new char[1024]; // 字符緩沖區(qū)
int len;
while ((len = bufferedReader.read(buf)) != -1) {
bufferedWriter.write(buf, 0, len);
}
bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
flag = false;
return flag;
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return flag;
}
}
package test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
Test t = new Test();
t.mapreduce("c:\\a.txt");
}
public void mapreduce(String filepath){
if(filepath==null||"".equals(filepath)){
System.out.println("文件名錯誤!");
return;
}
ListString list = new ArrayListString();
File f = new File(filepath);
BufferedReader reader=null;
try {
reader = new BufferedReader(new FileReader(f));
String tempString = null;
// 一次讀入一行,直到讀入null為文件結束
while ((tempString = reader.readLine()) != null) {
list.add(tempString);
}
reader.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (Exception e1) {
}
}
}
for(int i=0,length=list.size();ilength;i+=3){
String name = list.get(i).split(":")[1];
String id = list.get(i+1).split(":")[1];
String address = list.get(i+2).split(":")[1];
System.out.println("name:"+name+",id:"+id+",address:"+address);
}
}
}
直接給你一段實際可以用的代碼吧
/**
*?讀取一行一行的文件
*?
*?@param?filename
*?@return
*?@throws?IOException
*/
public?static?ListString?readLinedFile(String?filename){
ListString?filecon?=?new?ArrayListString();
String?m?=?"";
BufferedReader?file?=?null;
try{
file?=?new?BufferedReader(new?FileReader(filename));
while?((m?=?file.readLine())?!=?null)?{
if?(!m.equals(""))?//?不需要讀取空行
{
filecon.add(m);
}
}
file.close();
}catch(IOException?e){
e.printStackTrace();
}
return?filecon;
}
這段代碼實現了,你傳入文件的路徑,給你讀出一個String的List,一個String就是文件的一行,拿到這個List,你愛怎么處理就怎么處理,就比如你現在這個需求吧,就把這個List拿來遍歷
//這個是去除不含genotype字符串后的數組
ListString?resultList?=?new?ArrayListString();
for(String?line:filecon){
if(line.indexOf("genotype")?!=?-1){
resultList.add(line);
}
}
這樣處理完后就拿到了一個只有含有 genotype的數組,然后剩下的就是把這個數組寫到一個文件里面,我給你看一個把字符串數組寫到文件的方法,你可以拿去直接用
/**
*?寫入一行一行的文件
*?@param?lst?要寫入的字符串數組
*?@param?filename?要寫入的文件路徑
*?@return
*?@throws?IOException
*/
public?static?void?writeLinedFile(List?lst,?String?filePath)?throws?IOException?{
File?file?=?new?File(filePath);
BufferedWriter?out?=?new?BufferedWriter(new?FileWriter(file,?false));
for?(int?i?=?0;?i??lst.size();?i++)?{
String?temp?=?(String)?lst.get(i);
if?(!StringUtils.isBlank(temp))?{
out.write(temp);
out.newLine();
}
}
out.close();
out?=?null;
file=null;
}
這樣懂了吧?
我來說一下大致的實現步驟,具體實現需要你自己去寫了
1.檢索數據,檢索到的數據假定為一個list
2.你需要自己寫一個objectToString之類的方法來把檢索到的數據轉化為一個String或StringBuffer,就是往各字段間插",",往個記錄間插"\r\n",如此這類的轉換,假定轉換好的字符串為strResult.
3.然后用下面的代碼寫在后臺來控制下載,文件名那里你可以把時間格式控制好,或者用前臺傳過來的參數做名字。
response.setContentType("application/download;charset=UTF-8");
response.setHeader("Content-disposition","attachment;filename=\"" +new Date()+".csv\"");
OutputStream o = response.getOutputStream();
byte b[] = strResult.getBytes();
try{
o.write(b);
}catch(IOException e){
e.printStackTrace();
}finally{
o.close();
}
按照題目要求編寫的用javaBean規(guī)范設計的學生類Student的Java程序如下
需要創(chuàng)建user.java.test包,把Student.java文件和Test.java文件放入包中,編譯Student.java文件并且編譯運行Test.java文件得到運行結果
Student.java文件代碼如下
package user.java.test;
import java.io.Serializable;
public class Student implements Serializable{
private static final long serialVersionUID = 1L;
private String no;
private String name;
private double score;
public Student(){}
public Student(String no,String name,double score){
this.no=no;
this.name=name;
this.score=score;
}
public String getNo(){ return no;}
public void setNo(String no){ this.no=no;}
public String getName(){ return name;}
public void setName(String name){ this.name=name;}
public double getScore(){ return score;}
public void setScore(double score){ this.score=score;}
public String toString(){
return "學號:"+no+",姓名:"+name+",成績:"+score;
}
public static double getAvg(Student[] sArray){
double sum=0,avg;
for(int i=0;isArray.length;i++){
sum=sum+sArray[i].getScore();
}
avg=sum/sArray.length;
return avg;
}
}
Test.java文件代碼如下
package user.java.test;
public class Test{
public static void main(String[] args){
Student[] sArray=new Student[5];
sArray[0]=new Student("001","張三",89.5);
sArray[1]=new Student("002","李四",82.5);
sArray[2]=new Student("003","王五",93);
sArray[3]=new Student("004","趙六",73.5);
sArray[4]=new Student("005","孫七",66);
System.out.println("這些學生的平均分:"+Student.getAvg(sArray));
for(int i=0;isArray.length;i++){
System.out.println(sArray[i].toString());
}
}
}