散分,请大家指教皆提些建议!参与者有分!绝不吝啬!

silversnowjing 2004-09-30 08:07:30
对于我来说已经是老身常谈了,依旧是处理文本文件的!我下面贴出一段代码,也是CSDN上的诸多热心朋友帮我完成的!因为我是初学者!
这段代码实现了读取一个文本文件,经处理过后再存入另一个文件!这样的功能已经实现了,现在我出现新的问 题,请大家先看段代码:package ReadFileA;
import java.util.*;
import java.io.*;

public class ReadFileA1 {
public ReadFileA1() {
}

public static void main(String args[]){
ReadFileA1 test = new ReadFileA1();
String strfile = ".\\data\\from.txt";
Vector vctValue = new Vector() ;
vctValue = test.ReadFile(strfile) ;
System.out.println("In File" + strfile + " : " ) ;
try{
PrintWriter out = new PrintWriter(new FileWriter(".\\data\\to.txt"));
String line;
for (int i=0; i<vctValue.size() ; i++){
System.out.println( vctValue.get(i) ) ;
line = (String)vctValue.get(i);
out.println(line);
}
out.flush();
out.close();
}
catch(IOException e)
{
e.printStackTrace();
}

}

private Vector ReadFile(String strInFile) {
Vector vctInFile = new Vector() ;
String strLine = "" ;
int intLoop ;
try {
//这是建立了一个文件读取对象
BufferedReader bfrdInFile = new BufferedReader(new FileReader(strInFile));
strLine = bfrdInFile.readLine();
intLoop = 0 ;


while (strLine != null) {
strLine = strLine.trim() ;
if(strLine.startsWith("<")||strLine.equals("")) {
strLine = bfrdInFile.readLine();
continue;
}
else {
vctInFile.add( intLoop,intLoop +" : " + strLine ) ;
intLoop++ ;
}



strLine = bfrdInFile.readLine();

}
bfrdInFile.close();
}

catch (Exception e) {
e.printStackTrace() ;
}


return vctInFile;
}
}
现在就相当于我有一打的from.txt一样的文本文伯,每个内容都不一样,但是处理方法是一样的,我现在要把这一打的文都处理,然后再存入一个新的文件,现在问题出来了,我不可以把每一个文本文件都带入代码里面来处理吧,如果我有一千个这样的文件,工作量不是很大吗,所以听一个朋友提议用dir > FILENAME.TXT就可以实现,但是具体的操作我不是很明白,但是新存入的文件名应该怎么取呢!处理了N个这样的文本文件,就有N个要存的新文件,还请大家指教,应该用什么样的办法会简单一些呢,多提点建议,谢谢!
...全文
162 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
huakaisiji 2004-10-03
  • 打赏
  • 举报
回复
那个帮你写得程序可以啊
minghuitian 2004-10-03
  • 打赏
  • 举报
回复
接分.
dzeng81 2004-10-02
  • 打赏
  • 举报
回复
大家继续
silversnowjing 2004-10-02
  • 打赏
  • 举报
回复
还有其它的办法吗!我再等等就结贴!
WinSN 2004-10-02
  • 打赏
  • 举报
回复
up
water2004 2004-10-02
  • 打赏
  • 举报
回复
up 接!!!!
nwpulipeng 2004-10-02
  • 打赏
  • 举报
回复
呵呵,接分啦,^_^_^
yaray 2004-10-02
  • 打赏
  • 举报
回复
/** 帮你写了一个,专门处理某个目录下的文件合并,文件类型自定义**/

import java.util.*;
import java.io.*;

public class BatchFileProcess {

private Vector vct = new Vector(); // 保存内容

private String path = null; // 操作目录
private String file = null; // 新生成文件的(路径和)文件名
private String filterConditoin = null; //过滤条件
private boolean append = false; //新生成文件内容是否为追加方式

public BatchFileProcess(){
}

public void setPath(String path){
this.path = path;
}
public void setFile(String file){
this.file = file;
}
public void setFilterConditoin(String filterConditoin){
this.filterConditoin = filterConditoin;
}
public void setAppend(boolean append){
this.append = append;
}

public static void main(String args[]){

if(args==null || args.length<3 || args[0].length()==0 || args[1].length()==0 || args[2].length()==0){
System.out.println("Usage:\n java BatchFileProcess parameterA parameterB parameterC\n\nOption:\n"
+" parameterA -- The directory that it contains the files that you want to process.\n\n"
+" parameterB -- The new file that you want it saved all the contents\n\n"
+" parameterC -- The file's filter-condition\n\nRun Example:\n"
+" java BatchFileProcess F:\\yaray C:\\newFile.txt .txt");
return;
}

BatchFileProcess test = new BatchFileProcess();

test.setPath(args[0]); // 设置需要处理的文件夹
test.setFile(args[1]); // 设置新生成文件的(路径及)文件名
test.setFilterConditoin(args[2]); // 设置过滤条件

if(test.checkValid()){
test.writeFile();
}
}

private boolean checkValid(){
boolean hasTxtFile = false;
try {
File file = new File(path);
if(file.isDirectory()){

// 列出所有符合条件的文件
File[] flist = file.listFiles( new CustomFileFilter(filterConditoin) );
for(int i=0; i<flist.length; i++){
if(new File(flist[i].getAbsolutePath()).isFile()){// 避免空过滤条件
hasTxtFile = true;
readFile(flist[i].getAbsolutePath());
}
}

}else{
System.out.println("The parameter isn't a Directory");
}
}catch (Exception e) {
e.printStackTrace();
return false;
}
return hasTxtFile;
}

private boolean readFile(String fileName) {
try {

BufferedReader bfrdInFile = new BufferedReader(new FileReader(fileName));
String strLine = "";
while ((strLine=bfrdInFile.readLine()) != null) {
strLine = strLine.trim() ;
if(strLine.startsWith("<")||strLine.equals("")) {
continue;
}
vct.add( (vct.size()+1) +" : " + strLine ) ;
}
bfrdInFile.close();
}catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}

private boolean writeFile(){
if(!(new File(file)).isFile()){
System.out.println("The file is not a file.");
return false;
}
try{
BufferedWriter out = new BufferedWriter(new FileWriter( file , false));
String line;
for (int i=0; i<vct.size() ; i++){
line = (String)vct.get(i);
//System.out.println( line ) ;
out.write(line,0, line.length());
out.newLine();
//out.println(line);
}
out.flush();
out.close();
}catch(IOException e){
e.printStackTrace();
return false;
}
return true;
}


// 文件类型过滤
class CustomFileFilter implements FilenameFilter{

private String filterCondition;

// 参数:文件的扩展名
public CustomFileFilter(String condition){
filterCondition = condition;
}

public boolean accept(File dir, String name){
return (name.toLowerCase().endsWith( filterCondition.toLowerCase() ));
}

}

}
anson1314 2004-10-02
  • 打赏
  • 举报
回复
我也是新人

帮你UP 下
silversnowjing 2004-10-02
  • 打赏
  • 举报
回复
在等着!
gang2010 2004-10-02
  • 打赏
  • 举报
回复
up
silversnowjing 2004-10-02
  • 打赏
  • 举报
回复
对啊!例如说在C:\data 下面有N个都需要处理的文件,处理方法都是一样的,但是如果把每个文件都带进去的话工作量就太大了,现在是要把这N个文本文件都处理,并且生成新的文件,当然原文件还是要保留!不知道我说明白了没有!
hvbird 2004-10-02
  • 打赏
  • 举报
回复
楼主,我只能简单给你介绍一下你朋友说的那个“dir > FILENAME.TXT”方法,
这个是dos里的命令,完整形式好像是:dir *.txt>filename.txt,是把所有txt文件内容输入到
filename.txt中,不知道我说的对不对,错了请见谅!!
yaray 2004-10-01
  • 打赏
  • 举报
回复
帮你代码优化了一下:

import java.util.*;
import java.io.*;

public class ReadFileA1 {
public ReadFileA1() {
}

public static void main(String args[]){
ReadFileA1 test = new ReadFileA1();
String from = ".\\data\\from.txt";
String to = ".\\data\\to.txt";
test.writeFile( test.readFile(from) , to );
}

private boolean writeFile(Vector vctValue, String to){
try{
PrintWriter out = new PrintWriter(new FileWriter( to ));
String line;
for (int i=0; i<vctValue.size() ; i++){
line = (String)vctValue.get(i);
System.out.println( line ) ;
out.println(line);
}
out.flush();
out.close();
}catch(IOException e){
e.printStackTrace();
return false;
}
return true;
}

private Vector readFile(String strInFile) {
Vector vctInFile = new Vector() ;
try {
//这是建立了一个文件读取对象
BufferedReader bfrdInFile = new BufferedReader(new FileReader(strInFile));
String strLine = "";
int intLoop = 0 ;
while ((strLine=bfrdInFile.readLine()) != null) {
strLine = strLine.trim() ;
if(strLine.startsWith("<")||strLine.equals("")) {
continue;
}
vctInFile.add( intLoop +" : " + strLine ) ;
intLoop++;
}
bfrdInFile.close();
}catch (Exception e) {
e.printStackTrace() ;
}
return vctInFile;
}

}
yaray 2004-10-01
  • 打赏
  • 举报
回复
没完全看懂你的意思

是不是要处理某个目录下的文件?
ssbbjj 2004-10-01
  • 打赏
  • 举报
回复
不懂!只是来混分 ,多混几次分会不会多点啊!
silversnowjing 2004-10-01
  • 打赏
  • 举报
回复
没人帮忙吗?
silversnowjing 2004-09-30
  • 打赏
  • 举报
回复
应该就是这样吧!因为我是初学者啊,大家要体谅一下嘛!我就是不知道如何处理啊!楼上的你仁慈一点嘛!
pmaster 2004-09-30
  • 打赏
  • 举报
回复
这个也不会?搜一下啦
VincentSailing 2004-09-30
  • 打赏
  • 举报
回复
楼主的意思是不是说如何做到自动生成规定的文件名称啊!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧