精华内容
下载资源
问答
  • import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.Calendar;public classSendServer {private int num = 0;public voidprocess() {Calendar calendar=Calenda...

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.util.Calendar;public classSendServer {private int num = 0;public voidprocess() {

    Calendar calendar=Calendar.getInstance();

    String dir= calendar.get(Calendar.YEAR) + "" + getTimeString(calendar.get(Calendar.MONTH) + "");

    String oldPath= "/img2" +dir;

    String newPath= "/img5" +dir;try{

    while(true){

    System.out.println("复制" + oldPath + "目录开始");long t1 =System.currentTimeMillis();

    num= 0;

    copyFolder(oldPath, newPath);long t2 =System.currentTimeMillis();

    System.out.println("复制目录结束,用时:" + (t2-t1) + "ms,共复制:" + num + "文件");

    }

    }catch(Exception ex) {

    ex.printStackTrace();

    }

    }public voidcopyFolder(String oldPath, String newPath) {try{

    File mFile= newFile(newPath);if(!mFile .exists()){

    (new File(newPath)).mkdirs(); //如果文件夹不存在 则建立新文件夹

    }

    File a= newFile(oldPath);

    String[] file=a.list();

    File temp= null;for (int i = 0; i < file.length; i++) {if(oldPath.endsWith(File.separator)) {

    temp= new File(oldPath +file[i]);

    }else{

    temp= new File(oldPath + File.separator +file[i]);

    }if(temp.isFile()) {

    String fileName= newPath + "/" +(temp.getName()).toString();

    File testFile= newFile(fileName);if (!testFile.exists()) {

    FileInputStream input= newFileInputStream(temp);

    FileOutputStream output= newFileOutputStream(fileName);byte[] b = new byte[1024 * 5];intlen;while ((len = input.read(b)) != -1) {

    output.write(b,0, len);

    }

    output.flush();

    output.close();

    input.close();

    num++;

    }

    }if (temp.isDirectory()) {//如果是子文件夹

    copyFolder(oldPath + "/" + file[i], newPath + "/" +file[i]);

    }

    }

    }catch(Exception e) {

    System.out.println("复制整个文件夹内容操作出错");

    e.printStackTrace();

    }

    }privateString getTimeString(String time){if(time.length()<2){return "0" +time;

    }else{returntime;

    }

    }

    }

    展开全文
  • 定时任务,解压本地带密码的zip,里面的图片进行复制到其他文件夹,文件的txt信息写入数据库只适用于Java ssm框架配置springmvc.xml解压带密码的zip一、unZipUtils工具类读取txt内容二、ReadTxtUtil工具类处理...

    定时任务,解压本地带密码的zip,将里面的图片进行复制到其他文件夹,将文件里的txt信息写入数据库

    只适用于Java ssm框架

    配置springmvc.xml

    <!-- 设置定时任务 -->
    	<task:annotation-driven/>
    

    解压带密码的zip

    一、unZipUtils工具类

    1.source zip绝对路径,
    2.dest 解压的绝对路径,
    3.password zip密码
    
    
    public static void main(String[] args) throws IOException {
    	SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    	
    	UnZipUtils z = new UnZipUtils();
    	
    	String source = "F:\\"+df.format(new Date())+".zip";
    	
    	String dest = "g:\\"+df.format(new Date())+"";
    	
    	
    	String password = "password";
    	
    	z.unZip(source,dest,password);
    }
    
    /**
    * @param source 原始文件路径
    * @param dest 解压路径
    * @param password 解压文件密码(可以为空)
    */
    public boolean unZip(String source,String dest,String password){
    		try {
    		File zipFile = new File(source);
    		
    		
    		ZipFile zFile = new ZipFile(zipFile); // 首先创建ZipFile指向磁盘上的.zip文件
    		
    		
    		zFile.setFileNameCharset("GBK");
    		
    		
    		File destDir = new File(dest); // 解压目录
    		
    		if(!destDir.exists()){// 目标目录不存在时,创建该文件夹
    			destDir.mkdirs();
    		}
    		if (zFile.isEncrypted()) {
    			zFile.setPassword(password.toCharArray()); // 设置密码
    		}
    
    		
    		zFile.extractAll(dest); // 将文件抽出到解压目录(解压)
    		
    		
    		@SuppressWarnings("unchecked")
    		List<net.lingala.zip4j.model.FileHeader> headerList = zFile.getFileHeaders();
    		
    		
    		List<File> extractedFileList = new ArrayList<File>();
    
    
    		for (FileHeader fileHeader : headerList) {
    			if (!fileHeader.isDirectory()) {
    					extractedFileList.add(new File(destDir, fileHeader.getFileName()));
    			}
    		}
    
    
    	File[] extractedFiles = new File[extractedFileList.size()];
    	
    	
    	extractedFileList.toArray(extractedFiles);
    
    
    //	for (File f : extractedFileList) {
    //		System.out.println(f.getAbsolutePath() + "文件解压成功!");
    //	}
    
    	return true;
    	} catch (ZipException e) {
    	e.printStackTrace();
    	return false;
    	}
    	}
    

    读取txt内容

    二、ReadTxtUtil工具类

    1.path txt绝对路径

    /**
         * 读取一个文本 一行一行读取
         *
         * @param path
         * @return
         * @throws IOException
         */
        public static List<String> readFile(String path) throws IOException {
            // 使用一个字符串集合来存储文本中的路径 ,也可用String []数组
            List<String> list = new ArrayList<String>();
            FileInputStream fis = new FileInputStream(path);
            // 防止路径乱码   如果utf-8 乱码  改GBK     eclipse里创建的txt  用UTF-8,在电脑上自己创建的txt  用GBK
            InputStreamReader isr = new InputStreamReader(fis, "GBK");
            BufferedReader br = new BufferedReader(isr);
            String line = "";
            while ((line = br.readLine()) != null) {
                // 如果 t x t文件里的路径 不包含---字符串       这里是对里面的内容进行一个筛选
                if (line.lastIndexOf("---") < 0) {
                    list.add(line);
                }
            }
            br.close();
            isr.close();
            fis.close();
            return list;
        }
    

    处理图片

    三、ctrl复制图片的静态方法

    1.source 图片开始的路径,
    2.dest 图片目的路径,
    
    @SuppressWarnings("resource")
    	public static void CopyImg(File source,File dest) {
    		try {
    			//读取源地址文件的字节流
    			FileInputStream ins=new FileInputStream(source);
    			FileOutputStream out=new FileOutputStream(dest);
    			byte[] bs=new byte[1026];
    			int count=0;
    			while ((count=ins.read(bs,0,bs.length))!=-1) {
    			//把读取到的字节流写入到目的地址的文件里面
    			out.write(bs,0,count);
    			
    			}
     			//刷新下输出流
    			out.flush();
    			// 关闭输入流和输出流
    			out.close();
    			out.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    

    ctrl思路

    解:zip里面包括图片和txt文件
    1.定义读zip路径变量。。等
    2.调动readtxt工具类返回类型List,txt信息是这样的图1按|分割
    在这里插入图片描述

    for (int i = 1; i < readDatalist.size(); i++) {
    //	        	txt文件里的每一行数据
    				String str = readDatalist.get(i);
    				String[] sp = str.split("\\|");
    				StuData stuData = new StuData();
    				stuData.setStuName(sp[0]);
    				stuData.setStuSex(sp[1]);
    				stuData.setStuIdCard(sp[2]);
    				stuData.setStuNature(sp[3]);
    				stuData.setStuBirthday(sp[4]);
    				stuData.setStuAddress(sp[5]);
    				stuData.setStuPhone(sp[6]);
    				stuData.setStuExamLvl(sp[7]);
    				stuData.setStuLsh(sp[8]);
    				stuData.setOpenId(sp[9]);
    				dataList.add(stuData);
    	        }
    

    3.拼接图片路径和学生信息一起新增到数据库
    在这里插入图片描述
    4.复制图片?我建了一个Contract路径类,还有configimg.properties定义路径的有需要联系我

    //复制s身份证照片到另一个文件夹
    	        	File ywjurls = new File(Contract.RECEIVE_URL+format+"\\"+stuIdCard+Contract.RECEIVE_SELF_CONSTANT+".jpg");//源文件地址
    	        	File newurls =new File(Contract.BASE_URL+Contract.SIGN_URL+stuIdCard+Contract.SELF_CONSTANT+".jpg");//目的文件地址
    	        	CopyImg(ywjurls, newurls);
    

    5.我写的是一个定时触发的接口12点38触发,加在方法上面

    @Scheduled(cron = "0 38 12 * * ?") 
    
    展开全文
  • Android 资源文件夹下的文件不能有大写字符,会导致R.java无法生成 ...在做图的时候,给图片命名经常会大小写混合命名比较好记,这些图片复制到drawable目录后,如果在xml文件里面调用有可能导致R.java文件无法生成。

    Android 资源文件夹下的文件不能有大写字符,会导致R.java无法生成

     

    在做图的时候,给图片命名经常会大小写混合命名比较好记,这些图片复制到drawable目录后,如果在xml文件里面调用将有可能导致R.java文件无法生成。

    展开全文
  • java实用组件集》 源码 图片压缩组件 注意: 需要在jsp页面中从新设计源文件的地址。 环境的搭建: 1、新建一个Web工程。 2、在工程的src下新建一个包smart.jrsoft.photo和smart.css.util。 3、source文件夹下...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...
  • 我们从网上找一堆图片,将图片放在同一个文件夹里面,将文件夹复制到项目下面去,如图: 第二步:导入图片 创建一个图片变量(全局变量),把图片赋值给图片变量,这一步是在面板的构造方法里面,然后在paint函数...

    导入图片

    虽然Java里面有画笔,但我们不可能说用画笔去绘画一个背景之类的,很不现实,所以我们可以加入图片,使用外界的图片。
    第一步:放入图片
    我们从网上找一堆图片,将图片放在同一个文件夹里面,将文件夹复制到项目下面去,如图:
    在这里插入图片描述

    第二步:导入图片
    创建一个图片变量(全局变量),把图片赋值给图片变量,这一步是在面板的构造方法里面,然后在paint函数里面绘制背景图片
    第三步:处理异常
    异常表示有风险,有两种解决方式,一种是逐级上报,另一种则是制作日志,这里选择第二种。
    把鼠标放在ImageIO,选择try/catch
    具体代码

    class BOKPanel extends JPanel{
    		//背景图片变量
    		Image background;//定义图片变量 background
    		public BOKPanel() {
    			// 读取图片文件赋值给background变量
    			try {//尝试
    				background = ImageIO.read(new File("Image/login.jpg"));
    				//文件在Image文件夹
    			} catch (IOException e) {//捕获,万一出错,
    				// TODO Auto-generated catch block
    				e.printStackTrace();//把异常日志信息打印出来
    			}
    		}
    		//绘制方法
    		@Override
    		public void paint(Graphics g) {
    			super.paint(g);
    			//绘制背景图片
    			g.drawImage(background, 0, 0,1199,660,null);
    		}
    	}	
    	
    

    //记得导包

    JLabel

    JLabel的作用就是创建文本,图片,图文…使用JLabel可以在背景图片上面增加文字或图片。
    先声明一个对象全局变量,然后调用JLabel构造方法,设定绝对布局
    代码如下:

    JLabel user;
    public bok_1() {
    	user = new JLabel("使用者");
    	user.setBounds(600, 300, 40, 30);
    	this.add(user);
    	
    	BOKPanel panel = new BOKPanel();
    	this.add(panel);
    	
    	this.setSize(1198, 600);
    	this.setLocationRelativeTo(null);
    	this.setUndecorated(true);
    	this.setDefaultCloseOperation(3);//这里3就是JFrame.EXIT_ON_CLOSE
    	//logo
    	this.setIconImage(new ImageIcon("image/115.png").getImage());
    	this.setVisible(true);	
    }
    

    //记得导包

    JTextField和JPasswordField

    JTextField是文本输入框,JPasswordField是密码输入框(输入进去的是看不见的),这两个的具体操作步骤 如JLabel;
    代码如下:

    	JLabel user;
    	JTextField text;
    	JPasswordField password;
    public bok_1() {
    	user = new JLabel("使用者");
    	user.setBounds(100, 300, 40, 30);
    	this.add(user);
    	
    	text = new JTextField();
    	text.setBounds(670, 300, 100, 30);
    	this.add(text);
    	
    	password = new JPasswordField();
    	password.setBounds(670, 350, 100, 30);
    	this.add(password);
    		
    	
    	BOKPanel panel = new BOKPanel();
    	this.add(panel);
    	
    	this.setSize(1198, 600);
    	this.setLocationRelativeTo(null);
    	this.setUndecorated(true);
    	this.setDefaultCloseOperation(3);//这里3就是JFrame.EXIT_ON_CLOSE
    	//logo
    	this.setIconImage(new ImageIcon("image/115.png").getImage());
    	this.setVisible(true);
    }
    

    //记得导包

    JButton 按钮

    实际操作和上面JLabel,JtextField,JPasswordText一样,但按钮毕竟是按钮,按钮可以增加一些功能,添加判断语句之类的,很好用。

    下面是具体代码:

    	JLabel user;
    	JTextField text;
    	JPasswordField password;
    	JButton button;
    public bok_1() {
    	user = new JLabel("使用者");
    	user.setBounds(100, 300, 40, 30);
    	this.add(user);
    	
    	text = new JTextField();
    	text.setBounds(670, 300, 100, 30);
    	this.add(text);
    	
    	password = new JPasswordField();
    	password.setBounds(670, 350, 100, 30);
    	this.add(password);
    	
    	button = new JButton("按钮");
    	button.setBounds(100, 400, 100, 100);
    	button.addActionListener(new ActionListener() {
    		//按钮监听
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			// TODO Auto-generated method stub
    			String userName = text.getText();
    			if("L777".equals(userName)){
    				System.out.println("nice");
    				JOptionPane.showMessageDialog(null,"nice");
    			}
    		}
    	});
    	
    	this.add(button);
    	
    	
    	BOKPanel panel = new BOKPanel();
    	this.add(panel);
    	
    	this.setSize(1198, 600);
    	this.setLocationRelativeTo(null);
    	this.setUndecorated(true);
    	this.setDefaultCloseOperation(3);//这里3就是JFrame.EXIT_ON_CLOSE
    	//logo
    	this.setIconImage(new ImageIcon("image/115.png").getImage());
    	this.setVisible(true);
    }
    

    全部代码

    package bok;
    
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JPasswordField;
    import javax.swing.JTextField;
    
    public class bok_1 extends JFrame {
    	JLabel user;
    	JTextField text;
    	JPasswordField password;
    	JButton button;
    public bok_1() {
    	user = new JLabel("使用者");
    	user.setBounds(100, 300, 40, 30);
    	this.add(user);
    	
    	text = new JTextField();
    	text.setBounds(670, 300, 100, 30);
    	this.add(text);
    	
    	password = new JPasswordField();
    	password.setBounds(670, 350, 100, 30);
    	this.add(password);
    	
    	button = new JButton("按钮");
    	button.setBounds(100, 400, 100, 100);
    	button.addActionListener(new ActionListener() {
    		//按钮监听
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			// 获取文本内容
    			String userName = text.getText();
    			if("L777".equals(userName)){
    				System.out.println("nice");
    				JOptionPane.showMessageDialog(null,"nice");
    			}
    		}
    	});
    	
    	this.add(button);
    	BOKPanel panel = new BOKPanel();
    	this.add(panel);
    	
    	this.setSize(1198, 600);
    	this.setLocationRelativeTo(null);
    	this.setUndecorated(true);
    	this.setDefaultCloseOperation(3);//这里3就是JFrame.EXIT_ON_CLOSE
    	//logo
    	this.setIconImage(new ImageIcon("image/115.png").getImage());
    	this.setVisible(true);	
    }
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		new bok_1();
    	}
    
    	class BOKPanel extends JPanel{
    		//背景图片变量
    		Image background;//定义图片变量 background
    		public BOKPanel() {
    			// 读取图片文件赋值给background变量
    			try {//尝试
    				background = ImageIO.read(new File("Image/login.jpg"));
    				//文件在Image文件夹
    			} catch (IOException e) {//捕获,万一出错,
    				// TODO Auto-generated catch block
    				e.printStackTrace();//把异常日志信息打印出来
    			}
    		}
    		//绘制方法
    		@Override
    		public void paint(Graphics g) {
    			super.paint(g);
    			//绘制背景图片
    			g.drawImage(background, 0, 0,1199,660,null);
    		}
    	}		
    }
    

    (个人学习总结,如有错误,敬请斧正,学习时间,20,11)

    展开全文
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...
  • java源码包4

    千次下载 热门讨论 2013-04-20 11:31:44
     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...
  • apk2java工具

    2013-03-10 17:35:17
    步骤:首先apk文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的,classes.dex复制到dex2jar.bat所在目录dex2jar-0.0.9.9文件夹。 在命令行下定位到dex2jar.bat所在...
  • 第二次Java项目实训

    2020-07-11 08:44:30
    一、创建项目 1、创建一个Java项目——学生信息管理系统(XXX)V1.0 具体步骤:File——New——project...驱动程序包复制到lib目录 作为库添加到项目(Add as Library) 二、创建实体类 在src创建net.xi.stude
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...
  • Java 课下练习题 T4

    2017-08-22 09:52:52
    1. 对指定的图片(>2M)进行复制,复制到另外一个文件夹下,要求使用InputStream,OutputStream或它们的子类来实现。 2. 对指定的文本文件进行从头到尾的遍历,并遍历的内容写入到另外一个文件。 3. 把...
  • 图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...
  • 先去官网下载:http://tess4j.sourceforge.net/2.下载的文件解压后把下面几个文件夹图片中选中的)复制到新建的项目中3.lib下的jar包加到build path 中。注意:lib里面除了jar包还有别的。4.根据官网的样例在...
  • 图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...
  • 图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...
  • 例如:我们新建一个test文件夹,在文件夹里新建一个test.html文件,然后整个test文件夹复制到Tomcat安装目录的webapps目录中,启动tomcat后在浏览器输入ip:port/test/test.html即可访问了。 ...
  • ② "实验9学生姓名"的文件夹中指定实验编号(CH04)的所有实验报告文档复制到一个(实验4学生姓名)文件夹中。 ③统计出①中以实验编号(实验4学生姓名)命名的文件夹中文档的数量,并列出所有文档的名称、长度...
  • 如果系统检测无效或非标准分区表标记,提示用户是否继续执行该命令。除非您访问驱动器有问题,否则不要继续进行。向系统分区写入新的主引导记录可能破坏分区表并导致分区无法访问。  format  指定的驱动器...
  • 3.fckeditor文件夹复制到webRoot下 4.在jsp页面做两件事 a:<%@ taglib prefix="fck" uri="http://java.fckeditor.net" %> b: ${product.introduction}"> 基本步骤就是上面那样了,fckeditor的功能基本能...
  • android反编译工具

    2013-02-07 09:58:33
    步骤:首先apk文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的,classes.dex复制到dex2jar.bat所在目录dex2jar-0.0.9.9文件夹。 在命令行下定位到dex2jar.bat所在目录...
  • 2.解压下载的dex2jar,classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录,运行 Java代码 dex2jar.bat classes.dex dex2jar.bat classes.dex 生成classes.dex.dex2jar.jar 3.运行...
  • Android 最新反编译工具(2013-06)

    热门讨论 2013-06-02 12:54:44
    首先apk文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的,classes.dex复制到dex2jar.bat所在目录dex2jar-0.0.9.9文件夹。 在命令行下定位到dex2jar.bat所在目录,...
  • Android APK反编译工具包(全)

    热门讨论 2013-06-02 12:59:00
    首先apk文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的,classes.dex复制到dex2jar.bat所在目录dex2jar-0.0.9.9文件夹。 在命令行下定位到dex2jar.bat所在目录,...
  • 解压下载的dex2jar,classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex 生成classes.dex.dex2jar.jar 运行JD-GUI,打开上面生成的jar包,即可看到源...
  • 解压下载的dex2jar,classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex 生成classes.dex.dex2jar.jar 运行JD-GUI,打开上面生成的jar包,即可看到源...
  • APKTool批处理版l

    2011-10-26 13:58:55
    第二种方法,就在res目录里面建立对应的语言资源文件夹(简体中文资源的目录名是values-zh-rCN,繁体中文是values-zh-rTW),英文资源values里面的arrays.xml和strings.xml复制到新目录里面进行汉化,让Android...

空空如也

空空如也

1 2 3
收藏数 44
精华内容 17
关键字:

java将图片复制到文件夹里

java 订阅