package com.mfh.comn.fs;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import com.mfh.comn.utils.FileUtils;
/**
* 文件路径字段对应的传入参数
* 注意:一个文件路径字段可以存储多个文件路径
* @author zhangyz created on 2012-4-17
* @since Framework 1.0
*/
public class FileParam {
private List<FileItemParam> fileItems = null;
public static String FILES_DIVIDE = ",";
/**
* 获取组合的文件名,不包括扩展名
* @return
* @author zhangyz created on 2012-4-26
*/
public String getFileName(){
if (fileItems == null || fileItems.size() <= 0)
return null;
String ret = fileItems.get(0).getFileName();
ret = FileUtils.getOnlyFileName(ret);
if (fileItems.size() > 1)
ret += "等";
return ret;
}
/**
* 判断上传文件的类型是否合法
* @param types 合法的类型集
* @return
* @author zhangyz created on 2012-4-26
*/
public void checkType(String types){
if (fileItems == null || fileItems.size() <= 0 || types == null || types.length() == 0)
return;
for (int ii = 0; ii < fileItems.size(); ii++){
String suffix = FileUtils.getSuffixName(fileItems.get(ii).getFileName());
if (suffix.length() == 0)
throw new RuntimeException("未指定文件类型");
if (types.indexOf(suffix.toLowerCase()) < 0)
throw new RuntimeException("不支持的文件类型:" + suffix);
}
}
/**
* 根据前缀,自动生成唯一的文件名
* @param preId 一般是uuid
* @return
* @author zhangyz created on 2012-4-26
*/
public String getAutoFileName(String preId){
if (fileItems == null || fileItems.size() <= 0)
return null;
StringBuilder builder = new StringBuilder();
String oneName;
for (int ii = 0; ii < fileItems.size(); ii++){
oneName = fileItems.get(ii).getAutoFileName(preId, ii);
if (ii > 0)
builder.append(FILES_DIVIDE);
builder.append(oneName);
}
return builder.toString();
}
/**
* 增加一个文件参数
* @param item
* @author zhangyz created on 2012-4-17
*/
public void addFileItem(FileItemParam item){
if (fileItems == null)
fileItems = new ArrayList<FileItemParam>();
fileItems.add(item);
}
public void clear(){
if (fileItems != null)
fileItems.clear();
}
public static String[] getSingleFileNames(String mutilPath){
return StringUtils.splitByWholeSeparator(mutilPath, FILES_DIVIDE);
}
/**
* 获取有效的全文件路径名
* @param mutilPath 存在的文件全路径名列表,可能包含路径,但路径分隔符都是/
* @param fileName 指定的文件名;若为空,取第一个
* @return 文件路径和文件名
* @author zhangyz created on 2012-4-17
*/
public static String[] getFileName(String mutilPath, String fileName){
String[] files = StringUtils.splitByWholeSeparator(mutilPath, FILES_DIVIDE);
if (files == null || files.length == 0)
return null;
if (fileName == null)
return FileUtils.extractPathAndFile(files[0]);
String[] pathFile;
for (String file : files){
pathFile = FileUtils.extractPathAndFile(file);
if (fileName.equals(pathFile[1])){
/*if (pathFile[0] == null)
return fileName;
else
return pathFile[0] + fileName;*/
return new String[]{pathFile[0], fileName};
}
}
return null;
}
/**
* 简单地将文件内容保存到本地,覆盖原有文件。
*/
/*public void operatorFile(IFileOperator fileOper) {
if (fileItems == null || fileItems.size() == 0)
return;
FileItemParam fileItem = null;
for (int ii = 0; ii < fileItems.size(); ii++){
fileItem = fileItems.get(ii);
fileOper.updateFile(null, fileItem.getFileName(), fileItem.getFileContent());
}
}*/
/**
* 获取总文件大小
* @return
* @author zhangyz created on 2012-4-23
*/
public long getTotalSize(){
if (fileItems == null || fileItems.size() == 0)
return 0;
else{
long iReturn = 0;
for (FileItemParam item : fileItems)
iReturn += item.getSize();
return iReturn;
}
}
public List<FileItemParam> getFileItems() {
return fileItems;
}
/**
* 获取总文件数
*/
public int getTotalNum(){
if (fileItems == null || fileItems.size() == 0)
return 0;
else{
return fileItems.size();
}
}
/**
* 获取指定索引的文件项
* @param index
* @return
* @author zhangyz created on 2012-5-12
*/
public FileItemParam getFileItem(int index){
if (fileItems == null || fileItems.size() == 0)
return null;
else
return fileItems.get(index);
}
/**
* 多个文件名合并辅助类
*
* @author zhangyz created on 2012-4-17
* @since Framework 1.0
*/
public static class FileNameMerger{
private int count = 0;
private StringBuilder builder = new StringBuilder();
/**
* 增加一个文件项名
* @param name
* @author zhangyz created on 2012-4-17
*/
public void addFileItemName(String name){
if (name != null){
if (count > 0)
builder.append(FILES_DIVIDE);
else
builder.setLength(0);// 初始化。
builder.append(name);
count++;
}
}
/**
* 获取总文件名
* @return
* @author zhangyz created on 2012-4-17
*/
public String getFullName(){
return builder.toString();
}
}
}