BI工具:打包全部帆软报表文件集中到一个文件
备注:本表需安装java开发工具eclipse或其他同类工具,以及文件查看软件EmEditor
作用:由于有时候发现错误或因为权限问题需要大批量修改涉及的SQL表,或者由于历史曾经写过代码但现在忘了只有零零星星的记忆,那么可以使用本代码执行出来的文件,通过搜索关键字来查找您所想知道的信息,再加以经验排查即可获得相应的表单或者cpt文件或者代码,方便精准修改文件或者复用代码。
例子:因为权限问题,需将客户表 CLIENT 的查看权限关闭,改用为视图 V_CLIENT 调用,因此需要将帆软报表中有调用CLIENT表的代码全部改为V_CLIENT,那么可以在本工具导出来的文件中查找“CLIENT”,找到《100202灯具UPPH月报表.cpt》的<日报数据>数据集使用了这个CLIENT表,接下来打开在帆软打开《100202灯具UPPH月报表.cpt》进行修改即可,并继续按照以上步骤查找其他存在“CLIENT”的报表文件。全部修改后,将新的全部报表文件重新打包成一个文件fine01,重新查找“CLIENT”用于检索是否漏掉的。这样可以精准定位精准检查,避免将数据后台的成百上千个表单都打开检查浪费精力并产生视觉疲劳导致错误。
↓↓
Java代码如下:
package sqltext;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class CpFile {
//本类使用于将指定文件夹的文件内容全部写到同一个文件里方便查找
public static void main(String[] args) throws Exception {
//存储文件路径,true 代表 可追加
BufferedWriter out1 = new BufferedWriter(new FileWriter("E:\\copy_one\\fine01.txt",true));
//读取文件路径
String pre="E:\\copy_all";
//读取文件后缀名
String suffix="";
//统计复制文件数量
int count=0;
//true 获取存储文件目录下所有存在文件的文件夹全路径,false 获取存储文件路径下所有文件全路径(true的子文件),
ArrayList path = getDirPath(new File[]{new File(pre)},false,suffix);
System.out.println("copy starting......");
//遍历路径,进行复制
for(String txtName:path){
//读取路径文件,"utf-8"防止中文乱码
BufferedReader buf = new BufferedReader(new InputStreamReader(new FileInputStream (txtName),"utf-8"));
//按行读取
String str = null;
String shujuji = ""; //判断数据集标志
out1.newLine();
out1.newLine();
out1.newLine();
out1.newLine();
out1.append("start -------------------------------------------------------------------------------------------------------- "+new File(txtName).getName()+" ------------------------------------------------------------------------------------------------------------------------------------------------------");
out1.newLine();
while((str=buf.readLine())!=null){
//换行
out1.newLine();
//写入数据
if( str.indexOf("
out1.append("--"+new File(txtName).getName()+" " + str+shujuji);
}
out1.append("end -------------------------------------------------------------------------------------------------------- "+new File(txtName).getName()+" ------------------------------------------------------------------------------------------------------------------------------------------------------");
out1.newLine();
out1.newLine();
out1.newLine();
out1.newLine();
System.out.println("copy \""+new File(txtName).getName()+"\" successed!");
count++;
buf.close();
}
out1.close();
System.out.println("copy ending......");
System.out.println("Files:"+count);
}
//获取最后一层文件夹,sign true获取最后一层文件夹,false 获取所有文件
public static ArrayList getDirPath(File[] files,Boolean sign,String suffix){
ArrayList fs=new ArrayList();
for(File f:files){
if(f.isDirectory())
fs.addAll(getDirPath(f.listFiles(),sign,suffix));
else{
if(sign){
if(!fs.contains(f.getParent()))
if(endWithCh(f,suffix))
fs.add(f.getParent());
}else{
if(!fs.contains(f.getPath()))
if(endWithCh(f,suffix))
fs.add(f.getPath());
}
}
}
return fs;
}
//以。。。结尾,"",或者null,默认无后缀名
public static Boolean endWithCh(File file,String suffix){
if(suffix==""||suffix==null) return true;
if(file.getName().endsWith(suffix))
return true;
else
return false;
}
}
具体使用方法:
- 将代码添加到eclipse
- 将所要查找的报表文件全部复制到 E:\copy_all
3,将E:\copy_one里的fine01.txt删除掉,因为我代码写的是追加数据,如果不删除原有文件,那新的内容会追加到旧的内容里。
- 在eclipse执行代码即可在E:\copy_one生成 fine01.txt文件,此时用软件EmEditor打开文件即可查找.(如果文件很小,也可以用电脑的记事本打开)
编辑于 2021-10-13 09:29
|