精华内容
下载资源
问答
  • java判断文件类型

    万次阅读 2019-05-28 16:10:59
    判断文件类型 在上传文件,判断文件类型的时候,往往会通过后缀名和头部信息判断,前者大大不靠谱,后者个别类型的文件不太好判断。这里推荐apache的一款tika,可以做文件判断还可以更强大的做内容解析。一下写出两...

    判断文件类型

    在上传文件,判断文件类型的时候,往往会通过后缀名和头部信息判断,前者大大不靠谱,后者个别类型的文件不太好判断。这里推荐apache的一款tika,可以做文件判断还可以更强大的做内容解析。一下写出两种方法判断,一个基于头部信息,一个基于tika.

    一:根据头部信息

    public class CheckFileType {
    
        private static Trace logger = Trace.getTrace(CheckFileType.class);
        // 缓存文件头信息-文件头信息
        public static final HashMap<String, String> mFileTypes = new HashMap<String, String>();
    
        static {
            // images
            mFileTypes.put("FFD8FF", "jpg");
            mFileTypes.put("89504E47", "png");
            mFileTypes.put("47494638", "gif");
            mFileTypes.put("49492A00", "tif");
            mFileTypes.put("424D", "bmp");
            //
            mFileTypes.put("41433130", "dwg"); // CAD
            mFileTypes.put("38425053", "psd");
            mFileTypes.put("7B5C727466", "rtf"); // 日记本
            mFileTypes.put("3C3F786D6C", "xml");
            mFileTypes.put("68746D6C3E", "html");
            mFileTypes.put("44656C69766572792D646174653A", "eml"); // 邮件
            mFileTypes.put("D0CF11E0", "doc");
            mFileTypes.put("D0CF11E0", "xls");//excel2003版本文件
            mFileTypes.put("5374616E64617264204A", "mdb");
            mFileTypes.put("252150532D41646F6265", "ps");
            mFileTypes.put("255044462D312E", "pdf");
            mFileTypes.put("504B0304", "docx");
            mFileTypes.put("504B0304", "xlsx");//excel2007以上版本文件
            mFileTypes.put("52617221", "rar");
            mFileTypes.put("57415645", "wav");
            mFileTypes.put("41564920", "avi");
            mFileTypes.put("2E524D46", "rm");
            mFileTypes.put("000001BA", "mpg");
            mFileTypes.put("000001B3", "mpg");
            mFileTypes.put("6D6F6F76", "mov");
            mFileTypes.put("3026B2758E66CF11", "asf");
            mFileTypes.put("4D546864", "mid");
            mFileTypes.put("1F8B08", "gz");
        }
    
        /**
         * @return 文件头信息
         * @author liang.pan
         * <p>
         * 方法描述:根据输入流获取文件头信息
         */
        public static String getFileType(InputStream inputStream) {
            return mFileTypes.get(getFileHeader(inputStream));
        }
    
        /**
         * @return 文件头信息
         * @author liang.pan
         * <p>
         * 方法描述:根据输入流获取文件头信息
         */
        public static String getFileHeader(InputStream inputStream) {
            InputStream is = null;
            String value = null;
            try {
                is = inputStream;
                byte[] b = new byte[4];
                /*
                 * int read() 从此输入流中读取一个数据字节。int read(byte[] b) 从此输入流中将最多 b.length
                 * 个字节的数据读入一个 byte 数组中。 int read(byte[] b, int off, int len)
                 * 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。
                 */
                is.read(b, 0, b.length);
                value = bytesToHexString(b);
            } catch (Exception e) {
            } finally {
                if (null != is) {
                    try {
                        is.close();
                    } catch (IOException e) {
                    }
                }
            }
            logger.info(">>>>>文件的头部信息:" + value);
            if (StringUtils.startsWith(value, "FFD8FF")) {
                value = value.substring(0, 6);
            }
            return value;
        }
    
        /**
         * @param src 要读取文件头信息的文件的byte数组
         * @return 文件头信息
         * @author liang.pan
         * <p>
         * 方法描述:将要读取文件头信息的文件的byte数组转换成string类型表示
         */
        private static String bytesToHexString(byte[] src) {
            StringBuilder builder = new StringBuilder();
            if (src == null || src.length <= 0) {
                return null;
            }
            String hv;
            for (int i = 0; i < src.length; i++) {
                // 以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式,并转换为大写
                hv = Integer.toHexString(src[i] & 0xFF).toUpperCase();
                if (hv.length() < 2) {
                    builder.append(0);
                }
                builder.append(hv);
            }
            return builder.toString();
        }
    
    }

    二:tika

    引入依赖
    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-core</artifactId>
        <version>1.20</version>
    </dependency>
    
    public class TikaToolKit {
    
        /**
         * 获取类型
         * @param file
         * @return
         * @throws IOException
         * @throws TikaException
         * @throws SAXException
         */
        public static String getMimeType(File file) {
            if (file.isDirectory()) {
                return "the target is a directory";
            }
    
            AutoDetectParser parser = new AutoDetectParser();
            parser.setParsers(new HashMap<MediaType, Parser>());
            Metadata metadata = new Metadata();
            metadata.add(TikaMetadataKeys.RESOURCE_NAME_KEY, file.getName());
            try (InputStream stream = new FileInputStream(file)) {
                parser.parse(stream, new DefaultHandler(), metadata, new ParseContext());
            }catch (Exception e){
                throw new RuntimeException();
            }
            return metadata.get(HttpHeaders.CONTENT_TYPE);
        }
    
        /**
         * 判断是否是图片
         * @param file
         * @return
         * @throws TikaException
         * @throws IOException
         * @throws SAXException
         */
        public static boolean isImage(File file){
            String type = getMimeType(file);
            System.out.println(type);
            Pattern p = Pattern.compile("image/.*");
            Matcher m = p.matcher(type);
            return m.matches();
        }
    }

    常见文件类型

    MimeType    文件类型
    application/msword    word(.doc)
    application/vnd.ms-powerpoint    powerpoint(.ppt)
    application/vnd.ms-excel    excel(.xls)
    application/vnd.openxmlformats-officedocument.wordprocessingml.document    word(.docx)
    application/vnd.openxmlformats-officedocument.presentationml.presentation    powerpoint(.pptx)
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet    excel(.xlsx)
    application/x-rar-compressed    rar
    application/zip    zip
    application/pdf    pdf
    video/*    视频文件
    image/*    图片文件
    text/plain    纯文本
    text/css    css文件
    text/html    html文件
    text/x-java-source    java源代码
    text/x-csrc    c源代码
    text/x-c++src    c++源代码
     

    展开全文
  • JAVA判断三角形的类型

    万次阅读 多人点赞 2017-10-20 09:58:04
    JAVA判断三角形的类型

    今天看到一段判断三角形类型的java代码,然后自己写了一个小程序

    	 public static void main(String[] args) {
    		 double chang[] = new double[3];
    		 Scanner sc = new Scanner(System.in);
    		 boolean flag = true;
    		 int n = 0;
    		 System.out.println("--------开始--------");
    		 while(flag){
    			 if(n > 0){
    				 System.out.println("是否继续:F-停止,T-继续");
    				 String str = sc.next();
    				 if("F".equals(str)){
    					 System.out.println("--------结束--------");
    					 break;
    				 }else  if(!"T".equals(str)){
    					 System.out.println("操作不合法,请重新输入:");
    					 continue;
    				 }
    			 }
    			 System.out.println("请输入三角形三条边:");
    			 for (int i = 0; i < chang.length; i++) {
    				chang[i] = sc.nextDouble();
    			 }
    			 n++;
    			 Arrays.sort(chang); //从小到大排序
    			 if(chang[0] + chang[1] > chang[2]){  //两边之和大于第三边
    				 //System.out.println(Math.sqrt(2)); //1.4142135623730951
    				 //System.out.println(Math.pow(1.4142135623730951,2)); //2.0000000000000004  
    				 //由于不能输入根号2,就用1.4142135623730951代替,模拟一下直角三角形,平方之后是2.0000000000000004
    				 if((int)(chang[2]*chang[2]) == (int)(chang[1]*chang[1]) + (int)(chang[0]*chang[0])){
    					 if(chang[2] == chang[1] || chang[2] == chang[0] || chang[1] == chang[0]){
    						 System.out.println("该三角形是等腰直角三角形");  
    						 continue;
    					 }else{
    						 System.out.println("该三角形是直角三角形");
    						 continue;
    					 }				 
    				 }else if(chang[0] == chang[1] && chang[1]== chang[2]){
    					 System.out.println("该三角形是等边三角形");
    					 continue;
    				 }else if(chang[2] == chang[1] || chang[2] == chang[0] || chang[1] == chang[0]){
    					 System.out.println("该三角形是等腰三角形");
    					 continue;
    				 }else{
    					 System.out.println("该三角形是普通三角形");
    					 continue;
    				 }
    			 }else{
    				 System.out.println("不是三角形");
    				 continue;
    			 }
    		 }
    		 
    	}
    运行结果:

    --------开始--------
    请输入三角形三条边:
    1 4 7
    不是三角形
    是否继续:F-停止,T-继续
    2
    操作不合法,请重新输入:
    是否继续:F-停止,T-继续
    T
    请输入三角形三条边:
    3 4 5
    该三角形是直角三角形
    是否继续:F-停止,T-继续
    T
    请输入三角形三条边:
    1.4142135623730951 1.4142135623730951 2
    该三角形是等腰直角三角形
    是否继续:F-停止,T-继续
    T
    请输入三角形三条边:
    6 6 6
    该三角形是等边三角形
    是否继续:F-停止,T-继续
    T
    请输入三角形三条边:
    4 6 6
    该三角形是等腰三角形
    是否继续:F-停止,T-继续
    F
    --------结束--------
    



    展开全文
  • java判断输入的字符类型个数

    千次阅读 2016-05-17 21:41:31
    import java.util.Scanner; public class rui{ static public void main(String[] args){ System.out.println("涂涂喊你输入一串字符啦!"); Scanner sc = new Scanner(System.in); String s = sc....
    import java.util.Scanner;
    
    public class rui{
    	
    	static public  void main(String[] args){
    		System.out.println("涂涂喊你输入一串字符啦!");
    		Scanner sc = new Scanner(System.in);
    		String s = sc.nextLine();
    		char[] c = s.toCharArray();
    		int number = 0,letter = 0,blank = 0,other = 0;
    		for(char ch : c){
    			if(ch>='0' && ch<='9')
    				number++;
    			else if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z'))
    				letter++;
    			else if(ch==' ')
    				blank++;
    			else 
    				other++;
    		}
    		System.out.println("涂涂说 输入的数字个数为"+number+"输入的字母个数为"+letter
    				+"输入的空格个数为"+blank+"输入其他字符个数为"+other);
    	}	
    }

    运行结果:

    涂涂喊你输入一串字符啦!
    78ertreSDSF¥#%@#¥……
    涂涂说 输入的数字个数为2输入的字母个数为9输入的空格个数为0输入其他字符个数为8

    展开全文
  • java 判断输入字符串String 是否为合法数值或两位小数数值double类型 import java.util.regex.Matcher; import java.util.regex.Pattern; /*** 判断是否为合法 Double类型,可以用于钱币 */ public boolean is...

    java 判断输入字符串String 是否为合法数值或两位小数数值double类型

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

    /*** 判断是否为合法 Double类型,可以用于钱币 */

    public boolean isDouble( String s ){

            Pattern pattern= Pattern.compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); // 判断小数点后2位的数字的正则表达式

            Matcher match=pattern.matcher( s ); 
            boolean bo = match.matches();

            retuen bo;

    }

    展开全文
  • 省略无帮助的部分,假设这里需要强制输入的数据为int类型 Scanner scan = new Scanner(System.in); while(!scan.hasNextInt()) { //没有这一行的话会导致无限循环 String useless = scan.next(); System.out....
  • java 判断数据类型和方法

    万次阅读 2017-07-13 09:32:35
    java 判断数据类型和方法 1。我从SOLR查询中获取一个数据一,已知数据类型,是string或者int 或者其他 2。我有一个方法(set方法),只有一个参数,但是我不知道参数的数据类型,可能是string 或者int 或者其他...
  • Java(2)-Java IO输入输出流

    万次阅读 多人点赞 2012-04-01 11:28:55
    Java中I/O操作主要是指使用Java进行输入,输出操作.Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的...
  • Java判断三角形类型并计算周长和面积 通过简单的数学公式和代码编写完成,废话不多说,直接上代码 程序代码: public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new ...
  • 判断输入类型是 boolean还是int double 等等 使用正则来判断,还有一种做法就是 hasnextInt 通过输入的判断来确定这个类型 这样是更简单的一种做法。也可以练习一下使用正则。 package src.p5; import java....
  • java 判断int类型为空

    千次阅读 2019-06-13 11:47:00
    int id = 10; if("0".equals(String.valueOf(id)) || "null".equals(String.valueOf(id)) || id <= 0) return false; ..."0".equals(String.valueOf(定义的int类型参数)...判断int类型不能为空或不能小于等于0 ...
  • java 判断输入的时间格式

    千次阅读 2017-01-19 14:46:24
    // 利用java中的SimpleDateFormat类,指定日期格式,注意yyyy,MM大小写 // 这里的日期格式要求javaAPI中有详细的描述,不清楚的话可以下载相关API查看 SimpleDateFormat format=new SimpleDateFormat("HH:mm")...
  • ``` import java.util.Scanner;...输入 PAT (Basic), debug看测试i = 3时,ch = str.CharAt(i) ,判断是不是空格,我用的 是'\0', if ( ch != '\0' && ch != '(' && ch != ')'), 还是进入了循环内,想问该怎么改?
  • JAVA判断文件的真实类型

    千次阅读 2018-07-03 16:45:20
    在文件传输过程中,为了安全验证,对于手工改动文件后缀名产生的伪造...java判断文件真实类型依靠的是文件的头部编码信息,具体代码如下:import java.io.FileInputStream; import java.io.IOException; import ja...
  • 键盘输入,判断输入是否为整数 public static void main(String[] args) { System.out.print("请输入数字:"); //创建键盘录入对象 Scanner sc = new Scanner(System.in); //判断输入是否为整数 if(sc....
  • java判断输入的是否是自然数

    千次阅读 2011-07-27 18:17:46
     * 编写一个Java应用程序的方法,该方法接收从键盘输入的自然数:  * 如果输入的数不是自然数。抛出异常,提示“请正确输入数字!”,然后继续等待用户输入。  * 如果输入的数为正数,则显示这个数,程序继续运行。...
  • java 类型判断方法

    万次阅读 2019-04-25 18:21:57
    判断类是否是某个类或者某个类的子类的方法有三种,分别是instanceof, isInstance,isAssignableFrom. 1、instanceof是关键字,isInstance和isAssignableFrom是Class中的方法。boolean isInstance(Object obj); ...
  • java判断文件的真实类型

    万次阅读 2016-07-17 15:58:33
    在文件传输过程中,为了安全验证,对于手工改动文件后缀名产生的伪造文件进行...java判断文件真实类型依靠的是文件的头部编码信息,具体代码如下: package com.zhuifeng.util.excel; import java.io.FileInputStrea
  • JAVA判断输入流字符编码的困惑

    千次阅读 2010-10-21 16:58:00
      近日在开发爬虫程序时发现,如果事先不指定正确的字符集编码,在得到InputStream字节流实例后使用程序自身去判断,相关代码如下Java代码if(charset == null || "".equals(charset)) { reader = ...
  • Java判断Map值的类型

    千次阅读 2019-10-29 17:39:17
    1、创建测试类(TestMap1.java) package com.jeff; import java.util.HashMap; import java.util.Map; public class TestMap1 { public static void main(String[] args) { Map<String, Object> map = ...
  • java-文件类型-文件类型判断

    千次阅读 2014-07-17 21:53:27
    摘要:文件类型判断:最直接的方法通过文件的后缀名字可以知道文件是sm
  • Java Scanner实现判断键盘输入内容

    万次阅读 2016-10-19 16:47:21
    java Scanner 判断键盘输入
  • import java.io.*; /* * @author: tianrenliang * @protramme CheckChacter * @date 2007.10.9 * @version: 1.0 * */public class CheckChacter { /* check the string whether a bina
  • private boolean isNum(String str) { try { new BigDecimal(str); ...如上所示,传入string ,如返回true 即可转换成int 类型: isNum(asja) --> false isNum (125) --> true  
  • Java——数据类型判断

    千次阅读 2018-10-23 16:18:50
    从键盘分别输入通过空格分割的整型(int)、浮点型(double)、字符型(String)、布尔型(boolean),根据读取的内容判断他们的类型并将他们解析为正确的对象,并都放到一个数组中。输出各个对象的类型 Input 字符串 ...
  • JAVA判断文件编码类型

    千次阅读 2013-09-04 14:18:42
    java读取文件,处理过程中,可能因为文件的编码问题导致了中文乱码。有时需要将UTF-8的改为ANSI的编码。以下代码就可以判断文件是什么编码方式。  主要jar包:cpdetector.jar  下载地址...
  • 实验内容: 使用java语言编程,实现键盘录入两个数据,比较两个数是否相等(采用方法调用方式),输出比较结果; 提高:对实现数字比较的方法进行重载,使之适应int、float、double、short类型的比较。
  • 编写Java程序,实现判断输入字符的类型(数字、小写字母、大写字母或其他字符) 实现思路: 声明变量c,用于存储用户输入的字符。 通过Scanner接收用户输入的字符,并为变量c赋值。 根据字符的...
  • Java中经常会用到Scanner从控制台输入,有的时候就会需求判断从控制台输入的数据是否为某种类型,最常用的判断输入的是否为数字,这个时候就需要用到hasNextInt()方法了。 举例说明: import java.util....
  • java:根据文件头来判断文件类型

    千次阅读 2016-11-23 10:57:16
    根据文件后缀来判断文件类型,往往是不靠谱的,因为要考虑到,可能人为的更改文件后缀,导致一些问题。 因此,下面是详细的根据文件头信息来判断文件类型。 文件头的十六进制以后继续补充。package ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 256,586
精华内容 102,634
关键字:

java判断输入类型

java 订阅