|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ruby里有这些工具吗?又要简单多少?我没有用过这两门语言,我估计在这些语言力没有很统一的这种标准,或者根本就没有提供。前两天看了《java中心编程》中关于java中的IO输出输入解说,劳绩很多,上面的程序是我读完书今后本人写的一个将zip文件会合的文件内容读掏出来然后显现(只限于文本,其他文件将会发生乱码),此程序也可经由过程改善能够失掉一个和winzip功效一样的类(可是没有界面,次要是awt不会:--(),过两天就把源码贴出来。很复杂的一个类,但愿对人人有效。
这是自己第一次发文章,不敷的地方请多多指教!!!
/**
*功效:Zip文件开释,Zip文件目次、选择目次后显现文件内容
*起首用户输出zip文件路径及称号,读取zip文件将文件会合的文件清单显现出来,
*用户选择必要显现的文件,以后经由过程DataInputStream类将文件内容读掏出来并
*显现在尺度输入端
*日期:2005-06-27
*Pcera
*/
importjava.util.*;
importjava.util.zip.*;
importjava.io.*;classZipFileHandle{
privateString[]FileNameArray;//实在文件名寄存数组
privateString[]FileNameArrayShow;//必要显现的文件名寄存数组
privateZipInputStreamzipFile;//zip输出流对象
privateZipEntryentry;//zip文件出口对象
privateintzipFileCount=0;//zip中的文件总数
/**
*初始化各个参数
*经由过程类的套嵌来会见文件
*将失掉文件的清单附值给数组,以便在前面用户选择时从数组中取得文件名
*/
publicZipFileHandle(Filefile){
try{
while(!(file.exists())){
System.out.println("Plaseinputrightpathagain:");
BufferedReaderuserInput=newBufferedReader(newInputStreamReader(System.in));
Stringfilepath=userInput.readLine();
file=newFile(filepath);
}
zipFile=newZipInputStream(newFileInputStream(file));
while((zipFile.getNextEntry())!=null){
zipFileCount++;
}
FileNameArray=newString[zipFileCount];
FileNameArrayShow=newString[zipFileCount];
}catch(IOExceptione){
System.out.println("初始化毛病!!!");
e.printStackTrace();
}
}
/**
*天生文件目次
*依据show的值来断定前往值
*假如show的值为"sh"则前往在屏幕上显现的称号
*假如show的值为"gr"则前往实践称号
*/
publicString[]getFileNameList(Stringshow,Filefile){
try{
inti=0;
StringFileName;
zipFile=newZipInputStream(newFileInputStream(file));
while((entry=zipFile.getNextEntry())!=null){
FileName=entry.getName();
//实在文件名附值
FileNameArray[i]=FileName;
//显现文件名附值
if(FileName.equals(""))FileName="...";
FileName=Integer.toString(i)+"-|"+FileName;
FileNameArrayShow[i]=FileName;
i++;
}
zipFile.close();
//依据前提前往文件数组
if(show=="sh"){
returnFileNameArrayShow;
}else{
returnFileNameArray;
}
}catch(IOExceptione){
System.out.println("读取zip文件内的文件名堕落!!!");
e.printStackTrace();
returnnull;
}
}
/**
*读取文件内容
*依据传送出去的zip文件对象和
*zip中所要显现的文件
*用户依据type来选择前往的是unicode信息还字节信息
*假如type是"Str"则前往字符串信息,"Byte"则前往经由过程字节取得的文件内容
*/
publicStringloadFileCon(StringfileName,Filefile,Stringtype){
StringfileContent="",conTemp="";
byte[]fileConfByte;
try{
//找到要显现的文件出口,然后读取经由过程文本格局读取文件内容
zipFile=newZipInputStream(newFileInputStream(file));
//读取文件内容
while((entry=zipFile.getNextEntry())!=null){
if(entry.getName().equals(fileName)){
//经由过程字节读取文件内容
if(type.equals("Byte")){
fileConfByte=newbyte[(int)entry.getSize()];
DataInputStreamreader=newDataInputStream(zipFile);
reader.readFully(fileConfByte,0,(int)entry.getSize());
fileContent=newString(fileConfByte);
}elseif((type.equals("Str"))){
//经由过程unicode字符读取文件内容
BufferedReaderin=newBufferedReader(newInputStreamReader(zipFile));
while((conTemp=in.readLine())!=null){
fileContent=fileContent+conTemp+"
";
}
}
}
}
//封闭文件zip流
zipFile.closeEntry();
zipFile.close();
//前往
returnfileContent;
}catch(IOExceptione){
System.out.println("读取文件内容失利!!!");
e.printStackTrace();
returnnull;
}
}
/**
*演示办法
*/
publicstaticvoidmain(Stringargs[]){
StringfilePath;
String[]showFileArr;
String[]realFileArr;
StringfileContent;
intchoose;
//经由过程用户取得文件路径和文件名
try{
BufferedReaderuserInput=newBufferedReader(newInputStreamReader(System.in));
System.out.println("Plasezipfilepathandname!!!");
filePath=userInput.readLine();
Filefile=newFile(filePath);
while(!(file.exists())){
System.out.println("Plaseinputrightpathagain:");
filePath=userInput.readLine();
file=newFile(filePath);
}
//显现文件目次,显现选择的文件的内容
//取得实在文件名和显现文件名数组
ZipFileHandlezipFile=newZipFileHandle(file);
showFileArr=zipFile.getFileNameList("sh",file);
realFileArr=zipFile.getFileNameList("gr",file);
//打印显现文件名数组
inti=0;
while(i<showFileArr.length){
System.out.println(showFileArr[i]);
i++;
}
//经由过程用户输出取得必要显现的文件
System.out.println("Plasechoosefilenum!!!");
choose=Integer.parseInt(userInput.readLine());
if((choose<0)||(choose>showFileArr.length)){
System.out.println("Plasechoosefilenumretry!!!");
choose=Integer.parseInt(userInput.readLine());
}
//取得用户选择的文件的内容
fileContent=zipFile.loadFileCon(realFileArr[choose],file,"Byte");
System.out.println(fileContent);
}catch(Exceptione){
System.out.println("测试程序堕落!!!");
e.printStackTrace();
}
}
}
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试) |
|