📄 printfile.jsl
字号:
package FileTools;
import System.IO.*;
import System.*;
/**
* Summary description for PrintFile.
* 功能:把一个目录及子目录的所有要打印的源程序合并输出到一个指定的文件中(打印一个目录下的所有源程序)
* 可以指定文件后缀
*/
public class PrintFile
{
//程序以追加方式向输出文件中添加要打印的文件
//如果要分页,新文件要重新分页
protected String outputFileName; //输出文件名
//是否要打印行号的标志
protected boolean lineNumberFlag = true;
//文件后缀数组
protected String[] fileExtends;
protected String aLineStr = new String('-', 80);
//保存当前处理的目录,便于建目录
protected String aOldDirectory = "";
//工作目录
String workPath = "D:\\LogisticCore";
//目录打印层数,0表示不打印,1表示打印第一层即根目录 \
protected int layerCount = 2;
public void set_fileExtends(String[] aExtendList)
{
this.fileExtends = aExtendList;
}
public String get_workPath()
{
return this.workPath;
}
public void set_workPath(String aWorkPath)
{
this.workPath = aWorkPath;
}
public void set_outputFileName(String aOutputFileName)
{
this.outputFileName = aOutputFileName;
}
public String get_outputFileName()
{
return this.outputFileName;
}
public PrintFile()
{
//
// TODO: Add Constructor Logic here
//
}
/**
* 功能:对要打印的一个文件进行处理
*/
public void processFile(System.IO.FileInfo aFileInfo)
{
String aBuffer = "";
String aBuffer1 = "";
//判断文件是否存在
//准备文件
//FileInfo aFileInfo= new FileInfo(this.get_fileName());
StreamReader aInput = new StreamReader(aFileInfo.get_FullName(), System.Text.Encoding.get_Default());
StreamWriter aOutput = new StreamWriter(this.get_outputFileName(), true, System.Text.Encoding.get_UTF8());
StreamWriter aOutputList = new StreamWriter(this.get_outputFileName() + ".list", true, System.Text.Encoding.get_UTF8());
//打印文件的路径,便于建目录
String aFileDirectory = getLayerDirectory(aFileInfo.get_DirectoryName());
if (aFileDirectory != null)
{
if (!aFileDirectory.Equals(aOldDirectory))
{
aOutputList.WriteLine(aFileDirectory);
aOldDirectory = aFileDirectory;
aOutput.WriteLine("@@" + aFileDirectory);
}
}
//打印文件头
aOutput.WriteLine(aFileInfo.get_Name());
aOutput.WriteLine("文件:" + aFileInfo.get_FullName() + " " + aFileInfo.get_LastWriteTime().ToString());
aOutput.WriteLine(this.aLineStr);
//循环读入文件的每一行,对每一行进行处理
int lineCount = 0;
int currentPageline = 0;
while (!aInput.get_EndOfStream())
{
aBuffer = aInput.ReadLine();
lineCount = lineCount + 1;
currentPageline = currentPageline + 1;
if (lineNumberFlag)
{
//打印行号
aBuffer1 = ((System.Int32)lineCount).ToString("0000") + aBuffer;
}
else
{
//不打印行号
aBuffer1 = aBuffer;
}
aOutput.WriteLine(aBuffer1);
}
//打印每页的页未
aOutputList.WriteLine(aFileInfo.get_FullName());
aOutput.WriteLine(this.aLineStr);
aOutput.WriteLine("\f");
//
aInput.Close();
aOutput.Close();
aOutputList.Close();
}
/**
* 功能:处理当前目录下的所有文件,并且递归调用处理当前目录下的所有子目录
* 输入:当前要处理的目录
*/
public void processDirectory(System.IO.DirectoryInfo aDirectoryInfo)
{
//判断目录是否存在
if (!aDirectoryInfo.get_Exists())
{
return;
}
if (this.fileExtends != null)
{
int count = fileExtends.length;
for (int li_ii = 0; li_ii < count; li_ii++)
{
//处理每种后缀情况
String aFileExtend = fileExtends[li_ii];
FileInfo[] aFileList = aDirectoryInfo.GetFiles(aFileExtend);
String aFullFileName;
if (aFileList != null)
{
//对文件按文件名排序
Array.Sort(aFileList, new CompareFileInfo());
int count1 = aFileList.length;
for (int li_jj = 0; li_jj < count1; li_jj++)
{
//对每个文件进行处理
aFullFileName = aFileList[li_jj].get_FullName();
FileInfo aFileInfo = new FileInfo(aFullFileName);
//处理要打印的每个文件
this.processFile(aFileInfo);
}
//循环结束
}
} //处理每种后缀情况 end
} //处理后缀结束
//处理当前目录下的所有子目录
DirectoryInfo[] aDirectoryList = aDirectoryInfo.GetDirectories("*");
if (aDirectoryList != null)
{
//对目录进行排序
Array.Sort(aDirectoryList, new CompareDirectoryInfo());
int count2 = aDirectoryList.length;
for (int li_i1 = 0; li_i1 < count2; li_i1++)
{
//处理每个子目录
DirectoryInfo aDirectoryInfo1 = aDirectoryList[li_i1];
this.processDirectory(aDirectoryInfo1);
}
}
return;
}
/**
* 功能:根据layerCount,得到相对的路径,便于建立生成文档的目录
*/
public String getLayerDirectory(String aFullDirectory)
{
if (this.layerCount <= 0)
{
//不打印目录
return null;
}
String aBuffer = aFullDirectory.Replace(workPath, "");
String[] aArray = aBuffer.Split(new char[] { '\\' });
if (aArray != null)
{
int count = aArray.length;
int count1;
if (count >= this.layerCount)
{
count1 = this.layerCount;
}
else
{
count1 = count;
}
String aBuffer1 = "";
for (int li_ii = 0; li_ii < count1; li_ii++)
{
if (aBuffer1.Equals(""))
{
aBuffer1 = aBuffer1 + aArray[li_ii];
}
else
{
aBuffer1 = aBuffer1 +"\\"+ aArray[li_ii];
}
}
return aBuffer1;
}
else
{
return null;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -