Java通SAS下载sas脚本
简述
书接上回,有时候需要将执行好的sas数据库文件对外提供,实际程序和sas不在同一台服务器上,不想挂载硬盘可以利用FileService进行下载,本章就主要讲解如何使用FileService进行sas7bdat文件的下载。
配置workspace和配置libname信息
这个参照上一章
下载文件
主要关注:
- names变量,这里边会存放所有的sas7bdat文件名;
- IFilerf类,这里开始为实际读取文件的;
String folder = "C://test";
IFileService fileSvc = workspace.FileService();
boolean[] fim = new boolean[0];
StringHolder lp = new StringHolder();
StringSeqHolder names = new StringSeqHolder();
TypeCategorySeqHolder tc = new TypeCategorySeqHolder();
LongSeqHolder ls = new LongSeqHolder();
DateTimeSeqHolder dts = new DateTimeSeqHolder();
StringSeqHolder engines = new StringSeqHolder();
//获取文件列表
fileSvc.ListFiles(folder, ListFilesMode.ListFilesModePath, fim, lp, names, tc, ls, dts, ls, dts, engines);
//遍历文件
String[] fileNames = names.value;
for(String fileName : fileNames){
//获取文件引用
StringHolder retName = new StringHolder();
String rn = fileName.repalce(".sas7bdat", "");
IFileref fileRef = fileSvc.AssignFileref(rn, "", fileSvc.FullName(fileName, folder), "", retName);
//开始读写流
try(FileOutputStream fos = new FileOutputStream(fileName)){
OctetSeqHolder osh = new OctetSeqHolder();
int len = 0;
IBinaryStream bs = null;
while(true){
try{
len = 1 ;
bs = fileRef.OpenBinaryStream(StreamOpenMode.StreamOpenModeForReading);
while(len > 0){
bs.Read(9999999, osh);
len = osh.value.length;
if(len > 0){
fos.write(osh.value);
fos.flush();
}
}
}catech(Exception e){
log.error(e)
break;
}finally{
bs.Close();
}
}
}catech(Exception e){
log.error(e)
}
}
以上就是下载工作空间下的所有文件的逻辑,后面的打包逻辑输出逻辑就省略了,搞定。