精华内容
下载资源
问答
  • 因解压缩衍生出来新建文件或者文件夹后给其赋予权限,记录一下 首先,新建文件或者文件夹区别在于 文件夹是Directory 文件是 File if (!System.IO.Directory.Exists(decomPath)) //判断文件夹是否存在 { ...

    因解压缩衍生出来的新建文件或者文件夹后给其赋予权限,记录一下

     

    首先,新建文件或者文件夹,区别在于 文件夹是Directory 文件是  File

    if (!System.IO.Directory.Exists(decomPath)) //判断文件夹是否存在
    {
        System.IO.Directory.CreateDirectory(decomPath); //不存在,新建
        addDirectoryPower(decomPath, "Everyone", "FullControl"); //给新建的文件夹添加Everyone,完全控制权限
    }
    
    if (!System.IO.File.Exists(filePath)) //判断文件是否存在
    {
        System.IO.File.Create(filePath); //不存在,新建
        addFilePower(filePath, "Everyone", "FullControl"); //给新建的文件添加Everyone,完全控制权限
    }

    然后,所调用的对应添加权限的方法

            /// <summary>
            /// 给文件添加权限
            /// </summary>
            /// <param name="pathname"></param>
            /// <param name="username"></param>
            /// <param name="power"></param>
            public void addFilePower(string pathname, string username, string power)
            {
    
                DirectoryInfo dirinfo = new DirectoryInfo(pathname);
    
                //取得访问控制列表   
                DirectorySecurity dirsecurity = dirinfo.GetAccessControl();
    
                switch (power)
                {
                    case "FullControl":
                        dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));
                        break;
                    case "ReadOnly":
                        dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Read, AccessControlType.Allow));
                        break;
                    case "Write":
                        dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Write, AccessControlType.Allow));
                        break;
                    case "Modify":
                       dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Modify, AccessControlType.Allow));
                        break;
                }
                dirinfo.SetAccessControl(dirsecurity);
            }
    
    
            /// <summary>
            /// 给文件夹添加权限
            /// </summary>
            /// <param name="pathname"></param>
            /// <param name="username"></param>
            /// <param name="power"></param>
            public void addDirectoryPower(string pathname, string username, string power)
            {
    
                DirectoryInfo dirinfo = new DirectoryInfo(pathname);
    
                //取得访问控制列表   
                DirectorySecurity dirsecurity = dirinfo.GetAccessControl();
    
                FileSystemAccessRule filesystem = new FileSystemAccessRule(username, FileSystemRights.FullControl, AccessControlType.Allow);;
    
                switch (power)
                {
                    case "FullControl":
                        filesystem = new FileSystemAccessRule(username, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow);
                        break;
                    case "ReadOnly":
                        filesystem = new FileSystemAccessRule(username, FileSystemRights.Read, AccessControlType.Allow);
                        break;
                    case "Write":
                        filesystem = new FileSystemAccessRule(username, FileSystemRights.Write, AccessControlType.Allow);
                        break;
                    case "Modify":
                        filesystem = new FileSystemAccessRule(username, FileSystemRights.Modify, AccessControlType.Allow);
                        break;
                }
                bool isModified = false;
                dirsecurity.ModifyAccessRule(AccessControlModification.Add, filesystem, out isModified);
                dirinfo.SetAccessControl(dirsecurity);
           }

    注:

    给文件添加权限,可dirsecurity.AddAccessRule(new FileSystemAccessRule()) 后 直接dirinfo.SetAccessControl(dirsecurity) 即可

    而文件夹 需 先 new FileSystemAccessRule  然后 dirsecurity.ModifyAccessRule(AccessControlModification.Add, filesystem, out isModified)  最后 dirinfo.SetAccessControl(dirsecurity) 才可

    最后 附上 压缩与解压缩

    
            protected void BtnRar_Click(object sender, EventArgs e)
            {
                string zpath = FileUpload1.PostedFile.FileName;
    
                FileInfo file = new FileInfo(zpath);
                Decompress(file);//解压指定的GZ压缩文件
    
    
    
                string directoryPath = "F:\\TEST";
    
                DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);
                foreach (FileInfo fileToCompress in directorySelected.GetFiles()) //压缩成GZ
                {
                    Compress(fileToCompress);
                }
    
                foreach (FileInfo fileToDecompress in directorySelected.GetFiles(directoryPath)) //解压目录下的所有GZ压缩文件
                {
                    Decompress(fileToDecompress);
                }
    
            }
    
    
            #region 压缩,解压  GZ
            /// <summary>
            /// 压缩
            /// </summary>
            /// <param name="fileToCompress"></param>
            public static void Compress(FileInfo fileToCompress)
            {
                using (FileStream originalFileStream = fileToCompress.OpenRead())
                {
                    if ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
                    {
                        string currentFileName = fileToCompress.FullName;
                        int nIndex = currentFileName.LastIndexOf('.');
                        if (nIndex >= 0)
                        {
                            currentFileName = currentFileName.Remove(currentFileName.Length - fileToCompress.Extension.Length);
                        }
                        using (FileStream compressedFileStream = File.Create(currentFileName + ".gz"))
                        {
                            using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress))
                            {
                                originalFileStream.CopyTo(compressionStream);
                                Console.WriteLine("Compressed {0} from {1} to {2} bytes.", fileToCompress.Name, fileToCompress.Length.ToString(), compressedFileStream.Length.ToString());
                            }
                        }
                    }
                }
            }
            /// <summary>
            /// 解压GZ
            /// </summary>
            /// <param name="fileToDecompress"></param>
            public static void Decompress(FileInfo fileToDecompress)
            {
                using (FileStream originalFileStream = fileToDecompress.OpenRead())
                {
                    string currentFileName = fileToDecompress.FullName;
                    string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);
    
                    using (FileStream decompressedFileStream = File.Create(newFileName))
                    {
                        using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
                        {
                            decompressionStream.CopyTo(decompressedFileStream);
                        }
                    }
                }
            }
            #endregion

      需引用  ICSharpCode.SharpZipLib.dll

     下载地址如下: 

    https://download.csdn.net/download/Astpiy/13992062

    另,若 new FileStream  时 出现   “拒绝访问路径时”  请检查 路径参数  是否指向的某文件,而不是某文件夹

     

    展开全文
  • 说明 上一篇实现了文件的复制,这一篇来实现文件夹的复制,因为File既可以表示文件又可以表示文件夹,所以为什么不做一个既可以复制...文件夹的复制文件的复制之间的区别在哪里呢?区别就在于文件夹中包含若干个文...

    说明

    上一篇实现了文件的复制,这一篇来实现文件夹的复制,因为File既可以表示文件又可以表示文件夹,所以为什么不做一个既可以复制文件又可以复制文件夹的呢?当然上一篇写的方法,如果要实现文件夹的复制,就要把整个文件压缩成一个压缩包,就可以用上一篇的方法来复制这个压缩包,到另一个地方就可以解压,就得到整个文件夹。

    文件夹的复制

    文件夹的复制与文件的复制之间的区别在哪里呢?区别就在于文件夹中包含若干个文件以及文件夹,而java中File既可以表示文件又可以表示文件夹,所以我们要判断我们要复制的到底是文件还是文件夹,java中的File类提供了判断的方法,分别用来判断是否是文件还是文件夹,这两个方法是isFile(File file)和isDirectory(File file),但是分别去判断会有些冗余,File类中还提供了另一个方法listFiles,返回一个File数组,是用来获取当前file对象的所有子元素的,如果返回的数组为空,说明没有子元素,所以是个文件,否则是个文件夹。
    1.判断后如果是个文件,就直接按照上一篇的方法复制就可以。(https://blog.csdn.net/hansmu/article/details/100620311
    2.但是如果是个文件夹,我们需要先新建外层文件夹,然后再把当前文件夹里的所有内容一个个复制,例如先复制第一个,怎么复制呢?还是先判断里面的第一个文件到底是不是文件夹,是的话,把外层文件夹复制了,然后再往里面复制其他文件,如果是文件又调用复制文件的方法,所以又跟前面操作一样,所以这里需要用到递归。
    看代码:

    代码

    package TestFile;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class FileCopy {
        public void copyFile(File file,String path){
            //拼接得到文件的新路径
            String newPath=path+file.getAbsolutePath().split(":")[1];
            //创建一个新的file对象
            File newFile=new File(newPath);
            //获取file中的所有子元素
            File[] files=file.listFiles();
            if(files!=null){
                //如果file是一个文件夹
                //在想要的路径上创建一个新的文件夹
                newFile.mkdir();
                System.out.println(newFile.getName()+"复制完毕!");
                //如果文件夹里还有文件,就每一个文件都去复制一遍,递归调用
                if(files.length!=0){
                    for(File f:files){
                        this.copyFile(f,path);
                    }
                }
            }else{
                //如果file是一个文件,创建两个文件流,用来读取和写入
                FileInputStream fis=null;
                FileOutputStream fos=null;
                try{
                    fis=new FileInputStream(file);
                    fos=new FileOutputStream(newFile);
                    byte[] b=new byte[1024];
                    int count=fis.read(b);
                    while(count!=-1){
                        fos.write(b,0,count);
                        fos.flush();
                        count=fis.read(b);
                    }
                    System.out.println(newFile.getName()+"复制完毕!");
                }catch(IOException e){
                    e.printStackTrace();
                }finally{
                    if(fis!=null){
                        try {
                            fis.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if(fos!=null){
                        try {
                            fos.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
    
            }
        }
    }
    

    关于下面复制文件的这一块没有给注释,因为上一篇有了,可以查看我的上一篇文章。
    下面写一个主类测试一下:

    package TestFile;
    
    import java.io.File;
    
    public class MainTest {
        public static void main(String[] args){
    
            FileCopy fc=new FileCopy();
            fc.copyFile(new File("G://AR"),"F://test");
        }
    }
    

    找了很久,发现我G盘中没有什么好复制的文件夹,这个AR文件夹还可以,看一下里面的内容
    在这里插入图片描述

    结果

    在这里插入图片描述
    在这里插入图片描述
    复制成功。

    展开全文
  • 文章目录前言区别一区别二参考链接 前言 在我们下载下来的API文件中可以看到里面包含了两个版本,一个是常用...除了init.js文件大小不同的区别外,还有以下两个区别。 区别一 The compact build removes the depen...

    前言

    在我们下载下来的API文件中可以看到里面包含了两个版本,一个是常用的标准版,另一个是压缩版。

    compact

    如果到各自文件夹里面对比看的话,除了两个版本的init.js文件大小不一样外(压缩版小点,900多kb),其他文件大小一致。除了init.js文件大小不同的区别外,还有以下两个区别。

    区别一

    The compact build removes the dependency on the dijit namespace upon initial download, meaning that if you don’t need the dojo dijits they won’t be loaded. A side-effect of this is that a new info window and slider are provided.

    压缩版把最开始dijit下面的一些依赖给移除掉了,这里的dijit指的是dojo框架自身的一些微件(控件),ArcGIS在dijit之上封装了一些常用微件如信息窗(infowindow)缩放条(slider)等。下面通过最简单的例子看一看。

    标准版

    <!DOCTYPE html>
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
        <title>Simple Map</title>
        <link rel="stylesheet" href="https://js.arcgis.com/3.28/esri/css/esri.css">
        <style>
          html, body, #map {
            height: 100%;
            margin: 0;
            padding: 0;
          }
        </style>
        <script src="https://js.arcgis.com/3.28/"></script>
        <script>
          var map;
    
          require(["esri/map", "dojo/domReady!"], function(Map) {
            map = new Map("map", {
              basemap: "topo",  //For full list of pre-defined basemaps, navigate to http://arcg.is/1JVo6Wd
              center: [-122.45, 37.75], // longitude, latitude
              zoom: 13
            });
            new esri.tasks.QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_Currents_World/GPServer/MessageInABottle");
            console.log("标准版,esri.tasks.QueryTask直接就可以用,因为在init.js里面提前就有了");
          });
        </script>
      </head>
    
      <body>
        <div id="map"></div>
      </body>
    </html>
    

    标准版

    压缩版

    <!DOCTYPE html>
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
        <title>Simple Map</title>
        <link rel="stylesheet" href="https://js.arcgis.com/3.28compact/esri/css/esri.css">
        <style>
          html, body, #map {
            height: 100%;
            margin: 0;
            padding: 0;
          }
        </style>
        <script src="https://js.arcgis.com/3.28compact/"></script>
        <script>
          var map;
    
          require(["esri/map", "dojo/domReady!"], function(Map) {
            map = new Map("map", {
              basemap: "topo",  //For full list of pre-defined basemaps, navigate to http://arcg.is/1JVo6Wd
              center: [-122.45, 37.75], // longitude, latitude
              zoom: 13
            });
            new esri.tasks.QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_Currents_World/GPServer/MessageInABottle");
            console.log("压缩版,esri.tasks.QueryTask也可以用,不过是init.js里面某行代码require触发的,而不是直接把QueryTask类的代码拷贝了一份放到了init.js");
          });
        </script>
      </head>
    
      <body>
        <div id="map"></div>
      </body>
    </html>
    

    压缩版

    可以很明显的看出来,init.js文件大小不一样,而且同一个加载地图的功能,压缩版明显加载的js文件数更多。就是因为压缩版为了减小init.js的体积,把里面的一些依赖给移除掉了。

    区别二

    The compact build includes less modules than the standard build. If your application requires objects from modules not included in the compact build you will need to load them using require(). For example, if you want to perform geoprocessing with the compact build you will need to add the following require() statement to your application.
    require([“esri/tasks/Geoprocessor”, … ], function(Geoprocessor, … ){ … });
    These two features reduce the size of the build significantly. Less JavaScript code to execute means less work the browser has to do.

    这个说的是比起标准版,压缩版里面包含了更少的模块。比如说esri/tasks/Geoprocessor,这个在压缩版中是没有事先引入的,你必须通过require手动引入。其实这条跟没说差不多,因为我并不知道哪些是事先已经引入的,用的时候为了保险我只能先手动require进来。

    参考链接

    https://developers.arcgis.com/javascript/3/jshelp/intro_accessapi.html#compact-build

    展开全文
  • 文章目录详解Linux的压缩与压缩命令gzipgunzip命令gzipgunzipbzip2bunzip2命令bzip2bunzip2xzunxz命令xzunxz命令之间的区别 gzipgunzip命令 gzip gzip主要用于压缩,产生的gz格式文件,文件后缀为.gz。 ...

    详解Linux的压缩与解压缩命令


    gzip与gunzip命令

    gzip

    gzip主要用于压缩,产生的gz格式文件,文件后缀为.gz。
    格式:gzip 要压缩的文件路径

    参数说明:

    • -r

      • 加上-r参数将会把将要压缩文件及其子文件夹都压缩
    • -d

      • 解压参数,gzip命令也可用于解压文件

    gunzip

    gunzip常用于解压,将gz格式的压缩文件还原成原来文件


    bzip2与bunzip2命令

    bzip2

    bzip2常用于压缩,产生bz2格式文件,文件后缀为.bz2
    格式:bzip2 要压缩文件的路径

    参数同gzip。

    bunzip2

    bunzip2常用于解压缩,将bz2格式文件还原成原来文件。用法同gunzip

    xz与unxz命令

    xz

    xz 常用于压缩,产生xz格式文件,文件后缀为.xz。
    参数同gzip

    unxz

    unxz常用于解压缩,将xz格式文件还原成原来文件,用法同gunzip

    命令之间的区别

    命令 压缩与解压缩速度 压缩率 压缩文件后缀
    gzip/gunzip 最快 最低 .gz
    bzip2/bunzip2 比gzip慢 该与gzip .bz2
    xz/unxz 压缩较慢解压较快 最高 .xz

    压缩率:
    压缩率(Compression rate),描述压缩文件的效果名,是文件压缩后的大小与压缩前的大小之比,例如:把100m的文件压缩后是90m,压缩率为90/100*100%=90%,压缩率一般是越小越好,但是压得越小,解压时间越长


    我们一般压缩与解压缩一般不直接使用上述命令,而是使用tar打包命令,打包命令下期再讲

    展开全文
  • Linux压缩与压缩

    2016-01-12 11:17:18
    gzip2 file 和gzip没什么区别,最重要的区别就是他的压缩比非常之高(-k选项可以保留原文件) tar -zcvf file.tar.gz file 打包的同时进行压缩,可以对文件和文件夹都可以进行压缩打包 tar -jcvf file.tar.bz2 z
  • 命令:上传与压缩

    2021-03-27 16:45:25
    文章目录1.1 从互联网上下载 wget1.2 访问链接curl1.3 curl wget的区别1.4 从服务器上是给你传下载文件到本地上传二:打包压缩2.1 zip 打包压缩zip 压缩文件zip -r 压缩文件夹zip -r -q 静默输出2.2 unzip 解压-d...
  • #import "ViewController.h" #import "SSZipArchive.h" @interface ViewController () @end @implementation ViewController ...//文件的压缩与解压——知识点 ...//提示:(1)文件与文件夹的区别
  • 系统在加载高分辨率文件夹图片时对其图片进行了压缩。  2.关于滑动两个重要API: (1)移动屏幕一段距离:scrollBy(disX,disy); 向左滑距离为正,向右滑距离为负。 此方法其实是对scrollTo进行了包裹,...
  • 1、print函数使用不同。 Python3中,作为一个函数,应加括号,print("xxxxxxxxxxxxx",xxxxxxx) 2、在 shell中 new一个py文件,在新出现...将下载jieba-master解压缩,将其中jieba文件夹复制到Python安装目
  • .bz2和.gz的区别在于,前者比后者压缩率更高,后者比前者花费更少的时间。也就是说同一个文件,压缩后,.bz2文件比.gz文件更小,但是.bz2文件的小是以花费更多的时间为代价的。 压缩实例:对一个599M的文件夹...
  • 能够加载资源文件并对这些文件进行统一处理,诸如编译,压缩 最终一起打包在制定的文件夹中 处理一个文件可以使用多个loader loader执行顺序和配置顺序整好相反 第一个执行loader返回值接收源文件内容做...
  • .bz2和.gz的区别在于,前者比后者压缩率更高,后者比前者花费更少的时间。也就是说同一个文件,压缩后,.bz2文件比.gz文件更小,但是.bz2文件的小是以花费更多的时间为代价的。 压缩实例:对一个599M的文件夹...
  •  .bz2和.gz的区别在于,前者比后者压缩率更高,后者比前者花费更少的时间。也就是说同一个文件,压缩后,.bz2文件比.gz文件更小,但是.bz2文件的小是以花费更多的时间为代价的。  压缩实例:对一个...
  • zip、tar压缩目录下所有内容,属于归档文件,相当于windows下常见压缩文件夹 gzip/bzip2/zip -[1-9] 文件名,数字指出压缩率,数字越大,压缩后文件越小 所有解压都会将压缩文件解压到被解压文件同一目录下...
  • 「关注我,和我一起放下灵魂,让灵魂去搬砖...但是如果你可以同时开启四个任务处理1w 个文件,每个任务平均处理2500个这个时候你时间可以压缩在一小时以内。如何同时对一个文件夹开启四个任务同时处理不同任务,...
  • 在Windows 2000和Windows XP中,NTFS还能提供诸如文件与文件夹权限、加密、磁盘配额以及压缩之类高级特性。此硬盘格式不支持4GB以上大文件,使用32位文件分配表。 ntfs:一种从文件分配表(FAT)文件系统派生而来...
  • 通过使用java的相关类可以实现对文件或文件夹的压缩,以及对压缩文件的解压。 1.1 ZIP和GZIP的区别 gzip是一种文件压缩工具(或该压缩工具产生的压缩文件格式),它的设计目标是处理单个的文件。gzip在压缩...
  • 我想知道python2.5,pysqlite和apsw的sqlite3之间的区别?当我尝试使用python2.5在windows vista上安装pysqlite时,我有一个颠簸的运行,请参阅以下内容:>从http://sqlite.org/download.html下载sqlite并将它们解...
  • Java对zip格式压缩和解压缩通过使用java的相关类可以实现对文件或文件夹的压缩,以及对压缩文件的解压。1.1 ZIP和GZIP的区别gzip是一种文件压缩工具(或该压缩工具产生的压缩文件格式),它的设计目标是处理单个的文件...
  • rar压缩软件.rar

    2016-02-13 10:52:44
    RAR 是一个让你在命令行模式中管理压缩文件控制台应用。RAR 提供压缩、加 密、数据恢复和许多其它此手册中描述其它功能。 RAR 只支持 RAR 格式压缩文件,它默认有 .rar 扩展名。不支持ZIP 和其他格 式。即使...
  • linux下打包解压三种命令 最近在读《鸟歌Linux私房菜基础篇》,想着总结一下所读... 区别:bzip相比于gzip压缩的更好,而tar可以对整个文件夹进行缩,前两者则不能。 下面是使用语法: gzip读取内容:...
  • gulp-tinypng主要区别: 文件签名检查(为尽量减少不必要API调用,可选) 在压缩图像下载上没有创建临时文件/文件夹-直接从tinypng馈送到管道 旨在通过gulp&grunt(以及其他工具)标准化tinypng功能集。 ...
  • 网上找了几个使用ftp上传的例子但是没有实现,各方面总结加上自己的理解编写,最后使用sftp进行涉及,最后实现了文件的上传、下载、删除、解压缩以及文件夹的创建。特此记录下一下,以便不时之需。1.简单了解 ftp和...
  • 涉及到文件夹的上传,想了很久,在网上也找了一些资料,都没有什么很好的办法,都是用插件之类的解决,后面就想到了上传压缩文件,说到压缩文件,自然就会遇到,文件的解压缩问题,大家都知道,比较常见的压缩文件有rar,zip,...
  • linux压缩包

    2020-07-06 22:15:06
    bzip2,也是只能压缩文件.bz2格式,不能压缩文件夹gzip唯一的区别是,bzip2可以保留原文件 tar是对gzip和bzip2的高级封装, c—压缩 x—解压缩 v—显示过程信息 f----指定压缩文件的名字 z—底层使用gzip工具 j...
  • 网上找了几个使用ftp上传的例子但是没有实现,各方面总结加上自己的理解编写,最后使用sftp进行涉及,最后实现了文件的上传、下载、删除、解压缩以及文件夹的创建。特此记录下一下,以便不时之需。 1.简单了解 ftp...
  • 而是在 web 应用中所有数据状态变化,几乎都来自「事件」。dom 事件,ajax 成功或失败事件,路由 change 事件, setTimeout 定时器事件,以及自定义事件。任意事件都可能产生...
  • java解压ziprar

    千次阅读 2010-04-10 13:26:00
    涉及到文件夹的上传,想了很久,在网上也找了一些资料,都没有什么很好的办法,都是用插件之类的解决,后面就想到了上传压缩文件,说到压缩文件,自然就会遇到,文件的解压缩问题,大家都知道,比较常见的压缩文件有rar,zip,...
  • 4.13.1 有包名类 1在包名对应的文件夹编写源文件 2编译源文件 3将字节码文件压缩成.jar文件 编写清单文件.mf 运行jar命令生成jar文件 将.jar放在JDKjre\lib\ext目录中 4在任意地方新建源文件可以使用import语句...

空空如也

空空如也

1 2 3 4 5
收藏数 99
精华内容 39
关键字:

压缩文件夹与文件夹的区别