`

java文件上传大小的基础处理

    博客分类:
  • util
阅读更多

主要用于java中上传时对文件大小的处理,往数据库中存的时候比较方便、取的时候也有处理,还有基础的加减乘除:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * getSize(String str)---是将初始大小转化为常见单位
 * getRealNum(String str)---是将常见单位转换为初始大小(默认单位为B)
 * plus(String str1,String str2)--是将常见单位相加(str1 + str2)
 * subtract(String str1,String str2)--是将常见单位相减(str1 - str2)
 * multiply(String str1,String str2)--是将常见单位相乘(str1 * str2)
 * divide(String str1,String str2)--是将常见单位相除(str1 / str2)
 * @author lyf
 * @parameter string
 */
public class FileSizeUtil{
	/**
	 * 加法
	 * @param str1
	 * @param str2
	 * @return str1+str2
	 */
	public static String plus(String str1,String str2){
		long numa = getRealNum(str1);
		long numb = getRealNum(str2);
		return getSize(numa + numb);
	} 
	
	/**
	 * 减法
	 * @param str1
	 * @param str2
	 * @return str1-str2
	 */
	public static String subtract(String str1,String str2){
		long numa = getRealNum(str1);
		long numb = getRealNum(str2);
		return getSize(numa - numb);
	}
	
	/**
	 * 乘法
	 * @param str1
	 * @param str2
	 * @return str1*str2
	 */
	public static String multiply(String str1,String str2){
		long numa = getRealNum(str1);
		long numb = getRealNum(str2);
		return getSize(numa * numb);
	}
	
	/**
	 * 除法
	 * @param str1
	 * @param str2
	 * @return str1/str2
	 */
	public static String divide(String str1,String str2){
		long numa = getRealNum(str1);
		long numb = getRealNum(str2);
		return getSize(numa / numb);
	}
	
	//获取数
	private static String getNums(String str){
		String num = null;
		List<String> list = getList(str);
		for(int i = 0;i < list.size();i++){
			String a = list.get(i);
			if(isNumber(a)){
				num = a;
			}
		}
		return num;
	}
	
	// 获取单位
	private static String getUnits(String str){
		String unit = null;
		List<String> list = getList(str);
		for(int i = 0;i < list.size();i++){
			String a = list.get(i);
			if(isLetter(a)){
				unit = a;
			}
		}
		return unit;
	}
	
	/**
	 * 转换常见单位为初始大小
	 * @param num
	 * @param unit
	 * @return realNum
	 */
	public static Long getRealNum(String str){
		String unit = getUnits(str);
		String num = getNums(str);
		long realNum = 0;
		Long[] nums = {getNum(0),getNum(1),getNum(2),getNum(3),getNum(4)};
		String[] units = {"B","KB","MB","GB","TB"};
		for(int k = 0;k < units.length;k++){
			if(unit.toUpperCase().equals(units[k])){
				long n = (long)Integer.parseInt(num);
				realNum = n * nums[k];
			}
		}
		return realNum;
	}
	
	// 1024的n次方
	private static Long getNum(int n){
		return (long)Math.pow(1024, n);
	}
	
        //分离英语和数字
	private static List<String> getList(String str){
		List<String> list = new ArrayList<String>();

		String s = "\\d+.\\d|\\w+";
		Pattern pattern = Pattern.compile(s);
		Matcher ma = pattern.matcher(str);
		while(ma.find()){
			list.add(ma.group());
		}
		return list;
	}
	
	//判断是否是数字
	private static boolean isNumber(String str){
		return isTrue("\\d+",str);
	}
	//判断是否是字母
	private static boolean isLetter(String str){
		return isTrue("\\w+",str);
	}
	
	//判断--传入正则表达式
	private static boolean isTrue(String reg,String str){		
		Pattern pattern = Pattern.compile(reg);
		Matcher ma = pattern.matcher(str);
		while(ma.find()){
			return true;
		}
		return false;
	}
	
	/**
	 * 转换初始大小为常见单位
	 * @param size
	 * @return
	 */
	public static String getSize(long size){
		final long unit = 1024;
		java.text.DecimalFormat df = new java.text.DecimalFormat("#.##");
		
		String[] units = {"B","KB","MB","GB","TB"};
		for(int i = 0;i < units.length;i++){
			double d = getNumSize(size,i);
			if(d < unit){
				return df.format(d) + units[i];
			}
		}
		return null;
	}
	//单位换算
	private static double getNumSize(long size,int n){
		double d = size / Math.pow(1024, n);
		return d;
	}
	//test
	public static void main(String[] args){
		System.out.println(isNumber("123"));
		System.out.println(isLetter("aa"));
		System.out.println("转换为初始大小:" + getRealNum("234MB"));
		System.out.println("两字符串单位相加:" + plus("123MB","1024KB"));
		System.out.println("小写字母的字符串相加:" + plus("123mb","1024kb"));
	}
}
 

 

 

0
2
分享到:
评论

相关推荐

    java文件异步上传

    在Java端,我们需要创建一个处理文件上传的服务器端接口。这通常涉及到Servlet或Spring MVC中的控制器方法。当文件上传请求到达服务器时,这些方法会接收文件流,保存到服务器的磁盘上,或者将其存储到数据库或云...

    性能最好的Java文件上传组件

    "性能最好的Java文件上传组件"是指一种优化了上传速度和资源消耗的工具,它能够有效地处理大文件上传、多文件并发上传等问题,提高应用的用户体验。在这个场景中,我们提到了基于"COS"的Java文件上传组件。COS通常指...

    基于JAVA文件上传

    在Java编程语言中,文件上传是一项常见的功能...以上就是基于Java的文件上传涉及的主要技术点,涵盖了从客户端请求到服务器处理的整个流程。通过理解并熟练掌握这些知识点,开发者能够创建出高效、安全的文件上传功能。

    文件上传下载需要的jar包 java文件上传下载

    在这个场景下,"文件上传下载需要的jar包"指的是用于处理文件上传和下载操作的Java类库。下面将详细介绍相关的知识点。 1. **Apache Commons FileUpload**: 这是一个非常流行的Java库,用于处理HTTP请求中的多部分...

    java文件上传组件包

    在Java编程语言中,文件上传是一项常见的...总的来说,"java文件上传组件包"提供了一系列工具和方法,帮助开发者高效、安全地处理文件上传任务。通过理解并熟练运用这些知识点,你可以构建出稳定可靠的文件上传系统。

    java文件上传ar包

    总结来说,Java文件上传AR包涉及到使用Servlet API、Apache Commons FileUpload和IO库来处理多部分请求,解析上传的文件,存储到服务器,并确保整个过程的安全性和性能。在实际开发中,这些知识点是构建高效、安全...

    java实现文件批量上传

    3. `Java服务端代码`:处理文件上传的Servlet或Controller,负责接收请求、解析文件并保存到服务器。 4. `CSS样式文件`:定义了上传界面的样式,使界面更加美观。 5. `HTML模板`:可能包含了SWF和EXT的初始化代码,...

    java文件上传dome

    本示例("java文件上传dome")聚焦于使用Tomcat中的Servlet和Apache Commons FileUpload库来实现这一功能。以下是这个示例中涉及的关键知识点: 1. **Servlet**: Servlet是Java EE中用于扩展服务器功能的Java类。...

    java多文件上传实现

    在Java开发中,多文件上传是一项常见的功能,尤其在Web应用中,用户可能需要一次性上传多个文件,如图片、文档等。本知识点将详细介绍如何在Java中实现这一功能,以及结合Flash实现上传界面并显示上传进度条。 1. *...

    java上传文件jar

    这两个库提供了强大的文件操作和文件上传功能,是Java开发者处理文件上传问题的得力助手。 首先,`commons-io-2.5.jar`是Apache Commons IO库的一部分,这是一个用于处理输入/输出操作的Java库。它提供了许多实用...

    java文件上传源码

    总的来说,这个源码包提供了从客户端文件选择、HTTP上传、服务器端接收、文件保存到服务器的完整流程,是学习和理解Java文件上传功能的好例子。通过深入研究和实践,开发者可以掌握文件上传这一核心的Web开发技能。

    java文件上传和下载功能

    在Java中,`Commons-FileUpload`库是一个常用的处理文件上传的工具包,它提供了方便的API来解析`multipart/form-data`请求。在Servlet中,我们需要解析`HttpServletRequest`对象,获取到上传文件的信息,如文件名、...

    Java Spring文件上传,Java文件上传,Java通用文件上传

    在Java Spring框架中,文件上传是一项常见的功能,用于接收用户通过Web界面提交的文件。Spring提供了强大的MultipartFile接口,使得处理文件上传变得简单且高效。本文将深入探讨如何使用Java和Spring实现文件上传,...

    java文件上传例子

    在Java编程中,文件上传是一项常见的任务,尤其在开发Web应用程序...通过这个简单的Java文件上传例子,开发者可以学习如何在实际项目中实现文件上传功能,并理解相关的技术细节。这有助于提升Web应用的交互性和功能性。

    java文件上传代码upload

    这个“java文件上传代码upload”项目显然关注如何在Java环境下处理文件上传操作。下面将详细介绍Java中实现文件上传的相关知识点。 一、Servlet API与multipart/form-data 在Java Web开发中,文件上传通常通过...

    java 文件上传工具类 文件及文本数据

    以上是关于Java文件上传工具类处理文件及文本数据的主要知识点。理解并熟练掌握这些概念,可以帮助开发者创建高效、安全的文件上传系统。在实际开发中,还需要根据具体需求和项目规范来定制和扩展这些基础功能。

    jquery uploadify java文件上传

    **jQuery Uploadify与Java文件上传** 在Web开发中,文件上传功能是不可或缺的一部分。`jQuery Uploadify`是一款基于JavaScript和jQuery的插件,它提供了一种优雅的方式来进行多文件上传,具有良好的用户体验和丰富...

    Java文件上传案例

    这个"Java文件上传案例"涵盖了使用jsp、Servlet和JDBC工具类实现文件上传的基本流程。以下是对这些知识点的详细解析: 首先,**Java文件上传**通常涉及到HTTP协议中的multipart/form-data编码类型,这是在HTML表单...

    java多线程加队列上传文件_后台处理

    本文将详细介绍一个基于Java实现的多线程文件上传系统,并结合队列管理技术来优化后台处理流程。该系统通过创建多个线程来并行处理客户端的文件上传请求,同时利用队列结构来协调任务的调度与执行。 #### 关键技术...

    java文件上传smartUpload

    Java文件上传是Web开发中常见的功能之一,SmartUpload是一个强大的Java文件上传组件,它使得在Java应用程序中处理文件上传变得简单。在这个场景中,我们主要关注如何使用SmartUpload进行文件上传,并通过一个Demo来...

Global site tag (gtag.js) - Google Analytics