精华内容
下载资源
问答
  • 请问怎么通过Java代码,在一个指定的Jar包内添加一个新的文件? (不是使用压缩工具手动拉进去)
  • 48.如何jar包内添加多个类文件

    千次阅读 2012-04-07 10:37:55
    //如何jar包内添加多个类文件 //1.创建myPackage包,这个是E、myPackage类的文件 package myPackage; class E extends myNumber { } public class Ex5_3_2 { public static void main(String[] args) { ...

    文件Ex5_3_2.java

    //如何向jar包内添加多个类文件
    //1.创建myPackage包,这个是E、myPackage类的文件
    package myPackage;
    
    class E extends myNumber
    {
    }
    
    public class Ex5_3_2
    {
    	public static void main(String[] args) 
    	{
    		
    		E a=new E();
    		a.setNumber(5);
    		System.out.println("a=:"+a.getNumber());
    	}
    }
    
    //2.编译时要用javac -d .*.java
    //-d 用来指定存放生成的类文件的位置
    //. 为当前目录
    //*代表所有java文件
    
    //3.输入jar cvf new.jar myPackage\Ex5_3_2.class创建jar文件
    //实际是用myPackage内的类文件创建new.jar文件
    
    //4.输入jar uvf new.jar myPackage\E.class向new.jar添加文件
    
    //5.输入jar uvf new.jar myPackage\myNumber.class向new.jar添加文件
    
    //6.运行时要用java -classpath new.jar myPackage/Ex5_3_2
    //-classpath为执行jar文件时提示文件位置的参数。
    


    文件myNumber.java

    //如何创建、编译和执行同一个包内的不同文件
    //1.创建myPackage包,这个是Number类的文件
    package myPackage;
    class myNumber
    {
    	private int number;
    	public void setNumber(int i)
    	{
    		number=i;
    	}
    	public int getNumber()
    	{
    		return number;
    	}
    
    }
    
    //编译和运行的情况见Ex5_3_2



    展开全文
  • 项目中,有提供照片上传的功能,现在用户需要导出图片,但需要在照片底部添加用户名和编号,基本参考有一篇博文:可以使用java内置的图形工具,建立画布,将图片绘制在画布上,然后在底部添加文字,工具类如下: package test;...

              项目中,有提供照片上传的功能,现在用户需要导出图片,但需要在照片底部添加用户名和编号,基本参考有一篇博文:可以使用java内置的图形工具,建立画布,将图片绘制在画布上,然后在底部添加文字,工具类如下:

    package test;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import com.springMVC.util.LogUtil;
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;
    
    /*
     * 导出用户照片,添加编号和姓名在底部,2017年9月18日16:08:27
     */
    public class ChartGraphics {
    	private BufferedImage image;
    	private int imageWidth = 400; // 图片的宽度
    	private int imageHeight = 480; // 图片的高度
    
    	public void graphicsGeneration(String imgurl) {
    		int H_tip = 60; // 文字的高度
    
    		image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
    		// 设置图片的背景色
    		Graphics2D main = image.createGraphics();
    		main.setColor(Color.white);
    		main.fillRect(0, 0, imageWidth, imageHeight);
    
    		// ***********************用户照片**************
    		Graphics mainPic = image.getGraphics();
    		BufferedImage bimg = null;
    		try {
    			bimg = javax.imageio.ImageIO.read(new java.io.File(imgurl));
    		} catch (Exception e) {
    		}
    
    		if (bimg != null) {
    			mainPic.drawImage(bimg, 0, 0, 400, 400, null);
    			mainPic.dispose();
    		}
    		// ***********************设置最下方的用户编号和姓名****************
    
    		Graphics2D tip = image.createGraphics();
    		// 设置区域颜色
    		tip.setColor(Color.white);
    		// 填充区域并确定区域大小位置
    		tip.fillRect(0, 400, 400, H_tip);
    		// 设置字体颜色,先设置颜色,再填充内容
    		tip.setColor(Color.black);
    		// 设置字体
    		Font tipFont = new Font("宋体", Font.BOLD, 17);
    		tip.setFont(tipFont);
    		// tip.drawString("2016rz0001+王银生", 120, 450);
    		tip.drawString("新添加的标题", 120, 450);
    
    		createImage("E:\\person.png");
    		System.out.println("生成图片成功");
    
    	}
    
    	// 生成图片文件
    	@SuppressWarnings("restriction")
    	public void createImage(String fileLocation) {
    		BufferedOutputStream bos = null;
    		if (image != null) {
    			try {
    				FileOutputStream fos = new FileOutputStream(fileLocation);
    				bos = new BufferedOutputStream(fos);
    
    				JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
    				encoder.encode(image);
    				bos.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			} finally {
    				if (bos != null) {// 关闭输出流
    					try {
    						bos.close();
    					} catch (IOException e) {
    						e.printStackTrace();
    					}
    				}
    			}
    		}
    	}
    
    	public static void main(String[] args) {
    		ChartGraphics cg = new ChartGraphics();
    		try {
    			cg.graphicsGeneration("E:\\1.jpg");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }

               参考博客地址:http://www.cnblogs.com/qianna-daisy/p/4572221.html,在他的基础上稍微修改了一点,谢谢楼主.运行截图如下:

           原图:

          添加文字后效果图:

        

    ****************************************分割线****************************

         假设用户一下子选择了多个用户照片,需要同时下载,这时候就需要用到压缩文件,先转换文件,然后再压缩,使用a标签,让前端进行下载,压缩工具类如下,参考如下博文http://www.cnblogs.com/xgjblog/p/3807907.html::

    package com.rmsClient.util;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    import com.rmsClient.entity.dto.UserPicture;
    
    public class TransferToZipUtil {
    
    	public static void transToZip(File file, String fileName, List<UserPicture> userPicturesList) throws IOException {
    
    		byte[] buffer = new byte[1024];
    
    		file = new File(file.getAbsolutePath() + File.separator + fileName + ".zip");
    
    		// 生成的ZIP文件名为Demo.zip
    		// String strZipName = "D:\\Demo.zip";
    		ZipOutputStream out = new ZipOutputStream(new FileOutputStream(file));
    
    		// 需要同时下载的多个照片文件
    		List<File> manyFiles = new ArrayList<File>();
    
    		for (int i = 0; i < userPicturesList.size(); i++) {
    			// http://192.168.40.55:8080/upload/10141505718079.png
    			// 需要使用本地的地址,转成服务端的地址D盘下的picture目录
    			if (userPicturesList.get(i).getPicture().length() > 0) {
    				String urlPictureUrl = "D:\\用户照片\\" + userPicturesList.get(i).getRetireInforId()
    						+ userPicturesList.get(i).getName() + ".png";
    				manyFiles.add(new File(urlPictureUrl));
    			}
    
    		}
    
    		// 将文件进行压缩
    		for (int i = 0; i < manyFiles.size(); i++) {
    			FileInputStream fis = new FileInputStream(manyFiles.get(i));
    			out.putNextEntry(new ZipEntry(manyFiles.get(i).getName()));
    			int len;
    			// 读入需要下载的文件的内容,打包到zip文件
    			while ((len = fis.read(buffer)) > 0) {
    				out.write(buffer, 0, len);
    			}
    			out.closeEntry();
    			fis.close();
    		}
    		out.close();
    		System.out.println("生成照片压缩文件成功");
    
    	}
    }
    
          前端可以使用:

     

    $("#dlink").attr("href",json.content); 
    				$("#dlink").attr("download",'用户照片'+'.zip'); 
    				document.getElementById("dlink").click();  



    展开全文
  • 负责对图像文件进行压缩添加水印的操作。 需要在pom.xml中引入两个jar: MInio Client sdk和 谷歌的thumbnailator图像处理工具: : <groupId>io.minio <artifactId>minio <version>3.0.10 ...

    在搭建好了MInio分布式对象存储集群后,官方提供了MInio Client 各类语言的SDK,但是无法直接使用需要进一步封装,这里将JAVA 版的的SDK结合自身业务做个简单封装。

    Minio 中文文档入口:https://docs.min.io/cn/minio-quickstart-guide.html

    Minio Clinet SDK文档入口:https://docs.min.io/cn/java-client-api-reference.html

    以下共有俩个工具类,其中MioioUtil负责处理文件的上传及minio的相关初始化,ImageUtil负责对图像文件进行压缩及添加水印的操作。

    需要在pom.xml中引入两个jar包:

    MInio Client sdk包和谷歌的thumbnailator图像处理工具::

    <dependency>
        <groupId>io.minio</groupId>
        <artifactId>minio</artifactId>
        <version>3.0.10</version>
    </dependency>
    
    <dependency>
        <groupId>net.coobird</groupId>
        <artifactId>thumbnailator</artifactId>
        <version>0.4.8</version>
    </dependency>
    
    MinioUtil.class如下:
    import io.minio.MinioClient;
    import io.minio.errors.InvalidEndpointException;
    import io.minio.errors.InvalidPortException;
    import io.minio.policy.PolicyType;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.multipart.MultipartFile;
    import javax.imageio.ImageIO;
    import java.io.InputStream;
    import java.time.LocalDate;
    import java.util.Random;
    
    /**
     * 对象存储工具类
     * @author 10552
     */
    public class MinioUtil {
        private static final Logger log = LoggerFactory.getLogger(MinioUtil.class);
        //Mino服务器的AccessKey
        private final transient static String ACCESS_KEY="填写你的Mino服务器AccessKey";
        //Mino服务器的SecretKey
        private final transient static String SECRET_KEY="填写你的Mino服务器SecretKey";
        //桶名称
        private final transient static String BUCKET_NAME="delivery";
        //读写分离-上传服务器
        private final transient static String OSS_URL_WRITE="http://你的服务器上传地址";
        //读写分离-下载服务器
        private final transient static String OOS_URL_READ="http://你的服务器下载地址";
        //minio服务端口,默认是9000
        private final transient static int OSS_PORT=9000;
        private transient static boolean BUCKET_EXISTS=false;
        //单例模式-内部类实现
        private static class MinioClientHolder {
            private static  MinioClient minioClient;
            static {
                try {
                    minioClient = new MinioClient(OSS_URL_WRITE, OSS_PORT,ACCESS_KEY, SECRET_KEY);
                } catch (InvalidEndpointException e) {
                    e.printStackTrace();
                } catch (InvalidPortException e) {
                    e.printStackTrace();
                }
            }
        }
        /**
         * 获取minio客户端实例
         * @return
         */
        private static MinioClient getMinioClient(){
            return MinioClientHolder.minioClient;
        }
    
        /**
         * 上传文件
         * 支持单文件,多文件
         * 返回文件访问路径,多文件以分号‘;’分隔
         * @param muFiles
         * @return
         */
        public static String uploadFiles(MultipartFile... muFiles) {
            if (muFiles.length<1){
                throw new RuntimeException("上传文件为空!");
            }
            StringBuilder str=new StringBuilder();
            for (MultipartFile muFile : muFiles) {
                str.append(uploadFile(muFile));
                str.append(";");
            }
            return str.deleteCharAt(str.length()-1).toString();
    
        }
    
        /**
         * 内部方法
         * 上传文件
         * @param muFile
         * @return
         */
        private static String uploadFile(MultipartFile muFile){
            String fileName = getFilePathName(muFile,false);
            try {
                MinioClient minioClient = getMinioClient();
                if(!BUCKET_EXISTS&&!minioClient.bucketExists(BUCKET_NAME)){
                    minioClient.makeBucket(BUCKET_NAME);
                    minioClient.setBucketPolicy(BUCKET_NAME, "", PolicyType.READ_ONLY);
                    BUCKET_EXISTS=true;
                }
                InputStream inputStream=muFile.getInputStream();
                //如果是图片文件就进行压缩
                if (ImageUtil.isImage(muFile.getOriginalFilename())){
                    inputStream=ImageUtil.getInputStream(
                            ImageUtil.setWatermark(
                                    ImageUtil.compress(
                                            ImageIO.read(inputStream))),
                            ImageUtil.getFileExtention(muFile.getOriginalFilename()));
                }
                minioClient.putObject(BUCKET_NAME, fileName , inputStream,muFile.getContentType());
            }  catch (Exception e) {
                log.error("文件上传失败",e);
                throw new RuntimeException("文件上传失败");
            }
            return OOS_URL_READ+BUCKET_NAME+fileName;
        }
    
        /**
         * 	 获取文件名
         * @param muFile 文件
         * @param isRetain 是否保留源文件名
         * @return 返回文件名,以当前年月日作为前缀路径
         */
        private static String getFilePathName(MultipartFile muFile,boolean isRetain){
            String fileName = muFile.getOriginalFilename();
            String name=fileName;
            String prefix="";
            if(fileName.indexOf('.')!=-1) {
                name=fileName.substring(0,fileName.indexOf('.'));
                prefix=fileName.substring(fileName.lastIndexOf("."));
            }
    
            LocalDate date = LocalDate.now();
            StringBuilder filePathName=new StringBuilder("/upload/");
            filePathName.append(date.getYear());
            filePathName.append("/");
            filePathName.append(date.getMonthValue());
            filePathName.append("/");
            filePathName.append(date.getDayOfMonth());
            filePathName.append("/");
            //添加随机后缀
            Random r = new Random();
            int pix=r.ints(1, (100 + 1)).findFirst().getAsInt();
            filePathName.append(System.currentTimeMillis());
            filePathName.append(""+pix);
            //文件名超过32字符则截取
            if(isRetain){
                filePathName.append("_");
                if(name.length()>=32){
                    name=name.substring(0,32);
                }
                filePathName.append(name);
            }
            filePathName.append(prefix);
            return filePathName.toString();
        }

    ImageUtil.class工具类如下:

    import net.coobird.thumbnailator.Thumbnails;
    import net.coobird.thumbnailator.geometry.Positions;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import javax.imageio.ImageIO;
    import java.awt.*;
    import java.awt.font.FontRenderContext;
    import java.awt.font.TextAttribute;
    import java.awt.geom.AffineTransform;
    import java.awt.geom.Rectangle2D;
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.text.AttributedCharacterIterator;
    import java.text.AttributedString;
    
    /**
     * 图像工具类
     */
    public class ImageUtil {
        private static final Logger log = LoggerFactory.getLogger(ImageUtil.class);
        //压缩率
        private static final transient  float IMAGE_RATIO=0.1f;
        //压缩最大宽度
        private static final transient  int IMAGE_WIDTH=800;
        // 水印透明度
        private static float alpha = 0.3f;
        // 水印文字字体
        private static Font font = new Font("PingFang SC Regular", Font.PLAIN, 36);
        // 水印文字颜色
        private static Color color = new Color(111, 111, 111);
        //水印文字内容
        private static final String text="这是一个水印文本";
        // 水印之间的间隔
        private static final int XMOVE = 80;
        // 水印之间的间隔
        private static final int YMOVE = 80;
    
        /**
         * 压缩图像
         * @param image
         * @return
         * @throws IOException
         */
        public static BufferedImage compress(BufferedImage image) throws IOException {
            Thumbnails.Builder<BufferedImage> imageBuilder= Thumbnails.of(image).outputQuality(IMAGE_RATIO);
            if(image.getWidth()>IMAGE_WIDTH){
                return imageBuilder.width(IMAGE_WIDTH).asBufferedImage();
            }
            else {
                return imageBuilder.scale(1).asBufferedImage();
            }
        }
    
        /**
         * 图像添加水印
         * @param
         * @return
         */
        public static BufferedImage setWatermark(BufferedImage image)throws IOException {
            return Thumbnails.of(image)
                    .outputQuality(IMAGE_RATIO)
                    .scale(1)
                    .watermark(Positions.BOTTOM_RIGHT
                            ,createWatermark(text
                                    ,image.getWidth()
                                    ,image.getHeight()
                            )
                            ,alpha)
                    .asBufferedImage();
        }
        /**
         * 根据文件扩展名判断文件是否图片格式
         * @return
         */
        public static boolean isImage(String fileName) {
            String[] imageExtension = new String[]{"jpeg", "jpg", "gif", "bmp", "png"};
    
            for (String e : imageExtension) if (getFileExtention(fileName).toLowerCase().equals(e)) return true;
    
            return false;
        }
    
        /**
         * 获取文件后缀名称
         * @param fileName
         * @return
         */
        public static String getFileExtention(String fileName) {
            String extension = fileName.substring(fileName.lastIndexOf(".") + 1);
            return extension;
        }
        /**
         * 根据图片对象获取对应InputStream
         *
         * @param image
         * @param readImageFormat
         * @return
         * @throws IOException
         */
        public static InputStream getInputStream(BufferedImage image, String readImageFormat) throws IOException
        {
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            ImageIO.write(image, readImageFormat, os);
            InputStream is = new ByteArrayInputStream(os.toByteArray());
            os.close();
            return is;
        }
        /**
         * 创建水印图片
         * @param text 水印文字
         * @param width 图片宽
         * @param height 图片高
         * @return
         */
        public static BufferedImage createWatermark(String text,int width,int height)  {
            BufferedImage image = new BufferedImage(width
                    , height, BufferedImage.TYPE_INT_RGB);
            // 2.获取图片画笔
            Graphics2D g = image.createGraphics();
            // ----------  增加下面的代码使得背景透明  -----------------
            image = g.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
            g.dispose();
            g = image.createGraphics();
            // ----------  背景透明代码结束  -----------------
            // 6、处理文字
            AttributedString ats = new AttributedString(text);
            ats.addAttribute(TextAttribute.FONT, font, 0, text.length());
            AttributedCharacterIterator iter = ats.getIterator();
            // 7、设置对线段的锯齿状边缘处理
            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            // 8、设置水印旋转
            g.rotate(Math.toRadians(-30));
            // 9、设置水印文字颜色
            g.setColor(color);
            // 10、设置水印文字Font
            g.setFont(font);
            // 11、设置水印文字透明度
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
            /**
             * 水印铺满图片
             * 计算水印位置
             */
            int x = -width / 2;
            int y = -height / 2;
            int[] arr = getWidthAndHeight(text, font);
            int markWidth = arr[0];// 字体长度
            int markHeight = arr[1];// 字体高度
            // 循环添加水印
            while (x < width * 1.5) {
                y = -height / 2;
                while (y < height * 1.5) {
                    g.drawString (text, x, y);
    
                    y += markHeight + YMOVE;
                }
                x += markWidth + XMOVE;
            }
            // 13、释放资源
            g.dispose();
            return image;
        }
    
        /**
         * 计算字体宽度及高度
         * @param text
         * @param font
         * @return
         */
        private static int[] getWidthAndHeight(String text, Font font) {
            Rectangle2D r = font.getStringBounds(text, new FontRenderContext(
                    AffineTransform.getScaleInstance(1, 1), false, false));
            int unitHeight = (int) Math.floor(r.getHeight());//
            // 获取整个str用了font样式的宽度这里用四舍五入后+1保证宽度绝对能容纳这个字符串作为图片的宽度
            int width = (int) Math.round(r.getWidth()) + 1;
            // 把单个字符的高度+3保证高度绝对能容纳字符串作为图片的高度
            int height = unitHeight + 3;
            return new int[]{width, height};
        }

     

     

    展开全文
  • Linux压缩和打包

    千次阅读 多人点赞 2020-04-01 09:33:02
    压缩命令:zip、gzip、bzip2、xz 打包命令:tar

    一、压缩

    1、什么是压缩?

      压缩是利用算法将文件有损或无损地处理,以达到保留最多文件信息,而令文件体积变小
      那么是如何实现压缩的呢?计算机处理的信息是以二进制的形式表示的,且使用bytes单位计量,但实际上计算机中最小的单位是bits,大家都知道1byte=8bits,那么在记录一个数字1的时候是如何存储的呢?" 00000001 "实际上前面7位都是空的,但要满足我们操作系统的存取方式,必须以8为为单位存储,所以造成有一些空间并未填满。压缩就是将这些没有使用到的空间丢出来,让文件的占用空间变小。

      常见压缩解压缩命令:

    压 缩 解压缩 查看压缩文件内容 压缩文件后缀名
    zip uzip zcat / zless .zip
    gzip gunzip zcat / zless .gz
    bzip2 bunzip2 bzcat / bzless .bz2
    xz unxz xzcat / xzless .xz

    2、常见压缩命令

    ① zip命令

    • zip简介
        zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有".zip"扩展名的压缩文件。
    • 命令语法
        zip [选项]… 压缩包名 源文件或源目录
    • 命令常用选项
    选 项 解 释
    -r 递归处理,将指定目录下的所有文件和子目录一并压缩
    -m 将文件压缩之后,删除原始文件,即把文件移到压缩文件中
    -d 从压缩文件内删除指定文件
    -v 显示压缩过程或版本信息
    -q 不显示压缩过程
    -u 更新较新的文件到压缩文件中
    -压缩级别 压缩级别是从 1~9 的数值,数值越小压缩速度更快,数值越大压缩效果更好
    • 实例

      Ⅰ、同时压缩多个文件;

    [root@localhost tmp]# zip test.zip boot.log maillog
      adding: boot.log (deflated 64%)
      adding: maillog (deflated 77%)
    [root@localhost tmp]# ls -lh    //可以看出zip在压缩多个文件的同时会将它们一并打包
    total 12K
    -rw-r--r--. 1 root root 1.3K Mar 30 19:46 boot.log
    -rw-------. 1 root root  788 Mar 30 19:46 maillog
    `-rw-r--r--. 1 root root  953 Mar 30 20:03 test.zip`
    

      Ⅱ、向压缩文件test.zip中添加/var/log/secure文件;

    [root@localhost tmp]# zip test.zip /var/log/secure
      adding: var/log/secure (deflated 86%)
    [root@localhost tmp]# ls -lh
    total 12K
    -rw-r--r--. 1 root root 1.3K Mar 30 19:46 boot.log
    -rw-------. 1 root root  788 Mar 30 19:46 maillog
    `-rw-r--r--. 1 root root 1.6K Mar 30 20:14 test.zip`
    
    

      Ⅲ、从压缩文件test.zip中添删除/var/log/secure文件;

    [root@localhost tmp]# zip -d test.zip /var/log/secure
    deleting: var/log/secure
    [root@localhost tmp]# ls -lh
    total 12K
    -rw-r--r--. 1 root root 1.3K Mar 30 19:46 boot.log
    -rw-------. 1 root root  788 Mar 30 19:46 maillog
    `-rw-r--r--. 1 root root  953 Mar 30 20:17 test.zip`
    
    

    ② unzip命令

    • unzip简介
        unzip命令可以查看和解压缩".zip"文件。
    • 命令语法
        unzip [选项]… 压缩文件
    • 命令常用选项
    选 项 解 释
    -d 目录名 将压缩文件解压到指定目录下
    -n 解压时并不覆盖已经存在的文件
    -o 解压时覆盖已经存在的文件,无需确认。
    -l 列出压缩文件内所包含的文件
    -v 列出压缩文件的详细信息,包括压缩文件中包含的文件大小、文件名以及压缩比等
    -t 检测压缩文件完整性
    • 实例

      Ⅰ、查看压缩文件内所包含的文件;

    [root@localhost tmp]# unzip -l test.zip    //-l选项
    Archive:  test.zip
      Length      Date    Time    Name
    ---------  ---------- -----   ----
         1283  03-30-2020 19:46   boot.log
          788  03-30-2020 19:46   maillog
    ---------                     -------
         2071                     2 files
    
    [root@localhost tmp]# unzip -v test.zip    //-v选项
    Archive:  test.zip
     Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
    --------  ------  ------- ---- ---------- ----- --------  ----
        1283  Defl:N      462  64% 03-30-2020 19:46 4738bcbd  boot.log
         788  Defl:N      183  77% 03-30-2020 19:46 56a6c26f  maillog
    --------          -------  ---                            -------
        2071              645  69%                            2 files
        
    

      Ⅱ、解压压缩文件至指定目录;

    [root@localhost tmp]# unzip -d testdir/ test.zip
    Archive:  test.zip
      inflating: testdir/boot.log
      inflating: testdir/maillog
    [root@localhost tmp]# cd testdir/
    [root@localhost testdir]# ls
    boot.log  maillog
    
    

    ③ gzip命令

    • gzip简介
        gzip是Linux系统中经常使用的一个对文件进行压缩和解压的命令,只能用来压缩文件(如果指定目录,则会压缩该目录下的所有文件),文件经它压缩后会产生具有".gz"扩展名的压缩文件。
    • 命令语法
        gzip [选项]… 源文件
    • 命令常用选项
    选 项 解 释
    -r 递归处理,指定目录下的所有文件和子目录分别压缩
    -c 将压缩数据输出到标准输出,并保留源文件
    -l 列出压缩文件的相关信息(压缩文件大小、未压缩文件大小、压缩比率、未压缩文件名称)
    -v 显示指令执行过程
    -d 对".gz"文件进行解压缩
    -压缩级别 压缩级别是从 1~9 的数值,数值越小压缩速度更快,数值越大压缩效果更好,默认为 6
    • 实例

      Ⅰ、压缩文件;

    [root@localhost tmp]# touch testfile    //创建测试文件
    [root@localhost tmp]# ls
    testfile
    [root@localhost tmp]# gzip testfile    //使用gzip压缩
    [root@localhost tmp]# ls    //可以看出gzip在生成压缩文件的同时会删除源文件
    testfile.gz
    
    

      Ⅱ、将压缩数据输出到标准输出;

    [root@localhost tmp]# touch testfile    //创建测试文件
    [root@localhost tmp]# echo "123456" > testfile    //向文件中输入数据
    [root@localhost tmp]# gzip -c testfile    //将压缩数据输出到标准输出
    ▒h▒^testfile342615▒▒%
    
    

      Ⅲ、压缩并保留源文件;

    [root@localhost tmp]# touch testfile    //创建测试文件
    [root@localhost tmp]# gzip -c testfile > testfile.gz    //将压缩数据重定向到压缩文件中,这样就可以实现在压缩的同时不删除源文件
    [root@localhost tmp]# ls
    testfile  testfile.gz
    
    

      Ⅳ、压缩目录;

    [root@localhost tmp]# mkdir testdir    //创建测试目录
    [root@localhost tmp]# touch testdir/file1 testdir/file2 testdir/file3 testdir/file4    //创建测试文件
    [root@localhost tmp]# ls
    `testdir`
    [root@localhost tmp]# ls testdir/
    `file1  file2  file3  file4`
    [root@localhost tmp]# gzip -r testdir/    //递归压缩目录
    [root@localhost tmp]# ls    //可以看出,目录依然存在且并未变成压缩文件
    `testdir`
    [root@localhost tmp]# ls testdir/    //将目录下的所有文件分别压缩,且并未作打包处理
    `file1.gz  file2.gz  file3.gz  file4.gz`
    
    

    ④ gunzip命令

    • gunzip简介
        gunzip命令用来解压缩".gz"文件。
    • 命令语法
        gunzip [选项]… 文件
    • 命令常用选项
    选 项 解 释
    -r 递归处理,将指定目录下的所有文件和子目录分别解压缩
    -c 将解压缩数据输出到标准输出,并保留源压缩文件
    -f 强制解压缩文件
    -l 列出压缩文件内容
    -v 显示指令执行过程
    -t 检测压缩文件完整性
    • 实例

      解压缩文件;

    [root@localhost tmp]# touch testfile    //创建测试文件
    [root@localhost tmp]# gzip testfile    //压缩
    [root@localhost tmp]# ls
    testfile.gz
    [root@localhost tmp]# gunzip testfile    //解压缩
    [root@localhost tmp]# ls
    testfile
    
    

    ⑤ bzip2命令

    • bzip2简介
        bzip2与gzip类似,都只能用来压缩文件,且压缩任务完成后不会保留源文件,但".bz2"格式的压缩比率相对较高,压缩速度相对较慢,文件经它压缩后会另外具有".bz2"扩展名的压缩文件。
    • 命令语法
        bzip2 [选项]… 源文件
    • 命令常用选项
    选 项 解 释
    -c 将压缩数据输出到标准输出,并保留源文件
    -f 执行压缩或解压缩时,若输出文件与现有文件同名时,默认不会覆盖现有文件,使用 -f 则会强制覆盖现有文件
    -k 执行压缩或解压缩任务后,保留源文件
    -v 显示指令执行过程
    -d 对".bz2"文件进行解压缩
    -压缩级别 压缩级别是从 1~9 的数值,数值越小压缩速度更快,数值越大压缩效果更好 ,默认为 6
    -t 检测压缩文件完整性
    • 实例

      Ⅰ、压缩并保留源文件;

    `//方法一`
    [root@localhost tmp]# touch testfile    //创建测试文件
    [root@localhost tmp]# bzip2 -k testfile    //压缩
    [root@localhost tmp]# ls
    testfile  testfile.bz2
    `//方法二`
    [root@localhost tmp]# bzip2 -c testfile > testfile1.bz2    //将压缩数据重定向到压缩文件中,这样就可以实现在压缩的同时不删除源文件
    [root@localhost tmp]# ls
    testfile  testfile1.bz2  testfile.bz2
    
    

      Ⅱ、将压缩数据输出到标准输出;

    [root@localhost tmp]# bzip2 -c testfile
    bzip2: I won't write compressed data to a terminal.    //什么意思呢?我不会将压缩数据写入终端。
    bzip2: For help, type: `bzip2 --help'.    //也许选项-c的意义就是使用重定向执行压缩并保留源文件
    
    

    ⑥ bunzip2命令

    • bunzip2简介
        bunzip2命令用来解压缩".bz2"文件。
    • 命令语法
        bunzip2 [选项]… 压缩文件
    • 命令常用选项
    选 项 解 释
    -c 将解压缩数据输出到标准输出,并保留源压缩文件
    -f 执行解压缩时,若输出文件与现有文件同名时,默认不会覆盖现有文件,使用 -f 则会强制覆盖现有文件
    -k 执行解压缩任务后,保留源压缩文件
    -v 显示指令执行过程
    -L 显示版本信息
    • 实例

      Ⅰ、解压缩文件;

    [root@localhost tmp]# touch testfile    //创建测试文件
    [root@localhost tmp]# bzip2 testfile    //压缩
    [root@localhost tmp]# ls
    testfile.bz2
    [root@localhost tmp]# bunzip2 testfile.bz2    //解压缩
    [root@localhost tmp]# ls
    testfile
    
    

      Ⅱ、将解压缩数据输出到标准输出;

    [root@localhost tmp]# touch testfile    //创建测试文件
    [root@localhost tmp]# echo "123456" > testfile    //向文件中输入数据
    [root@localhost tmp]# bzip2 testfile    //压缩
    [root@localhost tmp]# bunzip2 -c testfile.bz2
    123456
    
    

    ⑦ xz命令

    • xz简介
        xz是一个很少见到的,但绝大多数Linux默认自带的一个压缩工具,与gzip和bzip2同样,都支持多文件压缩,但三者而言xz的压缩比率是最高的。
    • 命令语法
        xz [选项]… 源文件
    • 命令常用选项
    选 项 解 释
    -c 将压缩数据输出到标准输出,并保留源文件
    -f 执行压缩或解压缩时,若输出文件与现有文件同名时,默认不会覆盖现有文件,使用 -f 则会强制覆盖现有文件
    -k 执行压缩或解压缩任务后,保留源文件
    -v 显示指令执行过程
    -d 对".xz"文件进行解压缩
    -压缩级别 压缩级别是从 1~9 的数值,数值越小压缩速度更快,数值越大压缩效果更好,默认为 6
    -t 检测压缩文件完整性
    • 实例

      压缩文件;

    [root@localhost tmp]# touch testfile    //创建测试文件
    [root@localhost tmp]# xz testfile    //压缩
    [root@localhost tmp]# ls
    testfile.xz
    
    

    ⑧ unxz命令

    • unxz简介
        unxz命令用来解压缩".xz"文件。
    • 命令语法
        unxz [选项]… 压缩文件
    • 命令常用选项
    选 项 解 释
    -c 将解压缩数据输出到标准输出,并保留源压缩文件
    -k 执行解压缩任务后,保留源压缩文件
    -v 显示指令执行过程
    • 实例

      解压缩文件;

    [root@localhost tmp]# touch testfile    //创建测试文件
    [root@localhost tmp]# xz testfile    //压缩
    [root@localhost tmp]# ls
    testfile.xz
    [root@localhost tmp]# unxz testfile.xz    //解压缩
    [root@localhost tmp]# ls
    testfile
    
    

    二、打包(归档)

    1、什么是打包?

      打包(归档)是将多个文件和目录集中存储在一个文件中。归档文件没有经过压缩,因此,它占用的空间是其中所有文件和目录的总和。
      压缩是为了节省存储空间,那么打包的目的是什么呢?那是因为多数压缩程序只能针对一个文件进行压缩,如果需要压缩一大堆文件时,就得先将这一大堆文件打成一个包,然后再进行压缩。

    2、tar命令

    • 命令解释
        tar 命令可以把一大堆的文件和目录打包成一个文件,同时也可以进行解打包。使用 tar 命令归档的包通常称为 tar 包(tar 包文件都是以“.tar”结尾的)。
    • 命令语法
        tar [选项…] [文件]…
    • 命令常用选项

      ① 打包解包选项

    选 项 解 释
    -c 将多个文件或目录进行打包操作
    -x 对 tar 包做解打包操作
    -A 追加 tar 文件到 tar 包
    -r 追加文件至 tar 包结尾
    -u 更新原 tar 包中的文件
    -t 查看 tar 包中有哪些文件或目录
    -v 显示打包文件过程
    -o 文件解打包后到标准输出
    -N [date / file] 目录 打包指定目录中比date时间或者比file时间更新的文件
    -f 包名 指定包的文件名,这是选项必须使用的并且位置必须在最后一个,后跟包名

      ② 压缩 / 解压缩选项

    选 项 解 释
    -z 压缩或解压缩 “.tar.gz” 格式
    -j 压缩或解压缩 ".tar.bz2"格式
    -J 压缩或解压缩 ".tar.xz"格式
    • 实例

      Ⅰ、打包文件和目录;

    [root@localhost tmp]# touch testfile{1,2,3,4}    //创建测试文件
    [root@localhost tmp]# mkdir testdir    //创建测试目录
    [root@localhost tmp]# tar -cvf test.tar testfile{1,2,3,4} testdir/    //打包为test.tar文件
    testfile1
    testfile2
    testfile3
    testfile4
    testdir/
    [root@localhost tmp]# ls
    testdir  testfile1  testfile2  testfile3  testfile4  test.tar
    
    

      Ⅱ、打包并使用gzip命令压缩文件和目录;

    [root@localhost tmp]# touch testfile{1,2,3,4}    //创建测试文件
    [root@localhost tmp]# mkdir testdir    //创建测试目录
    [root@localhost tmp]# tar -zcvf test.tar.gz testfile{1,2,3,4} testdir/    //打包并压缩
    testfile1
    testfile2
    testfile3
    testfile4
    testdir/
    [root@localhost tmp]# ls -lh    //压缩后的包只有177byte大小
    total 20K
    drwxr-xr-x. 2 root root 4.0K Apr  1 07:03 testdir
    -rw-r--r--. 1 root root    0 Apr  1 07:03 testfile1
    -rw-r--r--. 1 root root    0 Apr  1 07:03 testfile2
    -rw-r--r--. 1 root root    0 Apr  1 07:03 testfile3
    -rw-r--r--. 1 root root    0 Apr  1 07:03 testfile4
    -rw-r--r--. 1 root root  10K Apr  1 07:12 test.tar
    -rw-r--r--. 1 root root  177 Apr  1 07:11 test.tar.gz
    
    

      Ⅲ、解压缩解打包test.tar.gz文件;

    [root@localhost tmp]# rm -rf testfile* testdir    //删除测试文件
    [root@localhost tmp]# ls
    test.tar  test.tar.gz
    [root@localhost tmp]# tar -zxvf test.tar.gz    //解压缩解打包,只需将选项-c换成-x即可
    testfile1
    testfile2
    testfile3
    testfile4
    testdir/
    [root@localhost tmp]# ls
    testdir  testfile1  testfile2  testfile3  testfile4  test.tar  test.tar.gz
    
    
    展开全文
  • Android打包混淆压缩

    千次阅读 2017-04-28 18:26:43
    声明这篇文章,借鉴参考了下面的两篇文章,算是一个自己对混淆这块的总结。 写给Android开发者的混淆使用手册 Android混淆打包那些事儿混淆简介说到混淆,就要说到proGuard,...如上所示,混淆过程会有如下几个功能
  • 先上效果效果如下压缩质量还不错,4.37M到550k 压缩率更是达到了87% ,这省了不少流量和服务器硬盘啊,哈哈 1.组件html定义了图片上传增加按钮,将原有的input标签样式进行了更改,图片显示也进行样式更改,利用...
  • Linux打包压缩

    千次阅读 2011-12-02 17:46:23
    zip 老了一些,但是所有系统都支持(.zip)。... zip 压缩后的文件名 要被压缩的文件 参数 参数  -1 压缩比,1-9可选,9为最大压缩率。  -c 增加注释。  -d 解压出一个文件。  -D 不存储文件的
  • Android 高清加载巨方案 拒绝压缩图片

    万次阅读 多人点赞 2015-10-21 10:33:52
    Android 高清加载巨方案 拒绝压缩图片 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/47251585; 本文出自:【张鸿洋的博客】 一、概述距离上一篇博客有段时间没更新了,主要是最近...
  • 打包 压缩 命令tar zip

    千次阅读 2019-01-10 09:41:00
    这里添加了一个参数用于设置压缩级别 -[1-9] ,1表示最快压缩但体积大,9表示体积最小但耗时最久。 最后那个 -x 是为了排除我们上一次创建的 zip 文件,否则又会被打包进这一次的压缩文件中, 注意:这里只能使用...
  • Hadoop集群中添加Snappy解压缩

    万次阅读 2015-09-24 14:31:58
    Snappy是用C++开发的压缩和解压缩开发,旨在提供高速压缩速度和合理的压缩率。Snappy比zlib更快,但文件相对要大20%到100%。在64位模式的Core i7处理器上,可达每秒250~500兆的压缩速度。  Snappy的前身是Zippy...
  • 在Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。 linux下最常用的打包,压缩程序...
  • 对与已生成的 apk 包,可以通过 aapt 工具详细查看包内的各项信息(包名、APP名称、APP图标、APP版本信息、SDK版本信息、权限列表等),还可对包内已编译的 xml 进行反编译输出,还可以对 apk 包进行修改(添加或...
  • 相信使用过的朋友应该会喜欢上libjpeg,它简单易用、压缩质量可以随意控制、并且稳定性很好,但是,官方网站给提供的libjpeg库, 不论是进行压缩时还是解压缩时,都需要用到FILE,使得我们如果想在内存中直接压缩或...
  • 一步步教你批量压缩打包文件夹

    千次阅读 2013-01-26 15:34:26
    上次下了一些文件,专门做了许多文件夹存放,本来想一劳永逸直接打个大压缩包存储,但是后来一想,如果以后要用到里面的几个... 把所有的文件夹选中,右击其中一个,选择“winrar”的“添加压缩文件”,在弹出的窗口
  • linux关于压缩解压tar

    千次阅读 2019-11-17 13:59:57
    -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。 -z:有gzip属性...
  • gulp从头到尾实现压缩,合并,加版本号以及部分问题解决(初版)(mac) 1- 我的文件结构如下: 2- gulpfile.js 文件配置如下: var gulp = require('gulp'), rev = require('gulp-rev'), // 给静态资源文件名添加...
  • 1、报错原因使用java.util.zip进行压缩文件时,压缩包的文件的文件名乱码,以下是部分代码//导入的import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream; //生成压缩包,将文件写入到压缩包 ...
  • SpringBoot-Maven打包压缩瘦身

    千次阅读 2020-02-24 21:40:12
    SpringBoot-Maven打包压缩瘦身一、Spring Boot 可执行 jar 分析1.1 打包1.2 两种 jar 的比较1.3 一次打包两个 jar二、SpringBoot迭代发布JAR瘦身配置三、引入内部编译的依赖四、Spring Boot Thin Launcher五、 maven...
  • 前端项目在build后,项目的代码通常进行混编、压缩等处理,我们的js代码最终会成为无序的js模块文件。若修改项目中业务的配置参数,通常可以通过接口服务来传达,但是有时候也需要外部的配置文件来传达,如项目已经...
  • 该方法递归实现将多个文件夹压缩在同一个zip包中 然后删除文件夹directoryName 下需要被压缩的文件。 package com.chuangqi.tools; import java.io.File; import java.io.FileInputStream; import java.io....
  • 图片压缩

    千次阅读 2014-05-09 17:04:05
     转自:手机游戏怎样压缩美术资源? 不知道题主的游戏是什么引擎开发的,仅从...只要是压缩,必然有损失,在损失程度可接受之可以依据以下优先级尝试 技法是最优先考虑的,比如说人物动作动画,用骨骼动画代替
  • tar命令---linux压缩、打包、解压教程

    千次阅读 2017-11-14 15:54:17
    # 由於我们使用 gzip 压缩,所以要查阅该 tar file 的文件时, # 就得要加上 z 这个参数了!这很重要的! 范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下 [root@linux ~]...
  • 图像压缩之算术编码

    千次阅读 2019-04-15 10:43:15
    JPEG中使用了量化、哈夫曼编码等,极大的压缩图片占用的空间,那么是否可以进一步压缩呢? 从技术角度讲,是可以的。如DropBox开源的lepton,在目前的JPEG压缩基础上,可以再节省22%左右的空间。 lepton中使用算术...
  • jar包内文件替换

    千次阅读 2019-05-11 14:29:09
    jar 参数 参数 说明 -c 创建一个jar -t 显示jar中的内容列表 -x 解压jar -u 添加文件到jar包中 ...-0 生成jar时不压缩内容 -M 不生成清单文件MANIFEST.MF -i 为指定的jar文件创建索引文件 -C...
  • 系统自动添加  三个 --- --- --- 代表 User Group Othoer   拥有者 同组人 其他人  r 读 w 写 x 目录可进入 / 文件可执行  r=4 w=2 x=1  所以 chmod -R 700 a10 代表 a10 目录及其子目录和文件 ...
  • 打好的JAR改配置文件一直挺烦。之前是用好压打开压缩包内部修改文件,特别不方便。 SpringBoot的jar不是常规的jar文件,其中包含着一些自启动的shell脚本,用jar进行重新... 解压缩jar 在当前目录下新建...
  • 基于Plupload的图片压缩上传

    千次阅读 2018-03-01 00:20:58
    为什么要做图片压缩? 现在手机拍照都快10M了,但是有时候图片上传只要看得清楚就可以了,比如上传身份证200k能看清楚,为什么要上传20M?这样做的好处是减少服务器存储压力、减少带宽占用。 为什么要自己做一个...
  • 第九章、文件与文件系统的压缩与打包 最近升级日期:2009/08/20 在 Linux 底下有相当多的压缩命令可以运行喔!这些压缩命令可以让我们更方便从网络上面下载大型的文件呢!此外,我们知道在 Linux 底下的扩展名...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 221,617
精华内容 88,646
关键字:

如何向压缩包内添加图