java not a jpeg file_javax.imageio.IIOException: Not a JPEG file: starts with 0x47 0x49

java处理图片时出现异常

javax.imageio.IIOException: Not a JPEG file: starts with 0x47 0x49

at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImageHeader(Native Method)

at com.sun.imageio.plugins.jpeg.JPEGImageReader.readNativeHeader(Unknown Source)

at com.sun.imageio.plugins.jpeg.JPEGImageReader.checkTablesOnly(Unknown Source)

at com.sun.imageio.plugins.jpeg.JPEGImageReader.gotoImage(Unknown Source)

at com.sun.imageio.plugins.jpeg.JPEGImageReader.readHeader(Unknown Source)

at com.sun.imageio.plugins.jpeg.JPEGImageReader.getWidth(Unknown Source)

at com.test.filedownloader.ImageHandler.getImageDim(ImageHandler.java:60)

at com.test.filedownloader.ImageHandler.main(ImageHandler.java:96)

Exception in thread "main" java.lang.NullPointerException

at com.test.filedownloader.ImageHandler.getImageDim(ImageHandler.java:70)

at com.test.filedownloader.ImageHandler.main(ImageHandler.java:96)

出现这种错误是因为将gif 图片后缀改成了jpg

解决办法:

根据文件的前面几个字节,判断文件类型

private String getFileSuffix(final String path) throws IOException {

String result = "";

String hex="";

if (path != null) {

File image=new File(path);

InputStream is = new FileInputStream(image);

byte[] bt = new byte[2];

is.read(bt);

MyLog.logger.info(bt+"\n"+bytesToHexString(bt));

hex=bytesToHexString(bt);

is.close();

if(hex.equals("ffd8")){

result="jpg";

}else if(hex.equals("4749")){

result="gif";

}else if(hex.equals("8950")){

result="png";

}

}

return result;

}

public static String bytesToHexString(byte[] src) {

StringBuilder stringBuilder = new StringBuilder();

if (src == null || src.length <= 0) {

return null;

}

for (int i = 0; i < src.length; i++) {

int v = src[i] & 0xFF;

String hv = Integer.toHexString(v);

if (hv.length() < 2) {

stringBuilder.append(0);

}

stringBuilder.append(hv);

}

return stringBuilder.toString();

}

调用的话就

String suffix = getFileSuffix(path);

一个png文件十六进制内容

0818b9ca8b590ca3270a3433284dd417.png

可参看链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java if用法_java中if语句的写法

if语句if 语句的语法如下&#xff1a;if(布尔表达式){//如果布尔表达式为true将执行的语句}如果布尔表达式的值为 true&#xff0c;则执行 if 语句中的代码块&#xff0c;否则执行 if 语句块后面的代码。免费视频教程推荐&#xff1a;java视频教程if...else语句if 语句后面可以…

java子类和父类实例_java中父类与子类之间的转换示例

java中父类与子类之间的转换示例有以下三点&#xff1a;示例一父类强制转子类pre class"brush:php;toolbar:false">Father f new Son();Son s (Son)f;//可以创建一个父类的实例&#xff0c;想要强制把父类对象转换成子类的&#xff0c;不行&#xff01;通俗的想…

java 二进制 定义_在Java中,我可以用二进制格式定义一个整数常量吗?

所以&#xff0c;随着Java SE 7的发布&#xff0c;二进制符号标准开箱即用。语法是非常直接和明显的&#xff0c;如果你有一个良好的理解二进制&#xff1a;byte fourTimesThree 0b1100;byte data 0b0000110011;short number 0b111111111111111;int overflow 0b10101010101…

java 原子类能做什么_死磕 java原子类之终结篇(面试题)

概览原子操作是指不会被线程调度机制打断的操作&#xff0c;这种操作一旦开始&#xff0c;就一直运行到结束&#xff0c;中间不会有任何线程上下文切换。原子操作可以是一个步骤&#xff0c;也可以是多个操作步骤&#xff0c;但是其顺序不可以被打乱&#xff0c;也不可以被切割…

java二重循环计数_java的二重循环代码样例

1.计算三个班的平均分import java.util.Scanner;public class AvgScore{public static void main (Sting[] args){int[] score new int[]; //成绩数组int classNum 3; //班级数量double sun 0.0; //成绩总和double[] average new double[classNum];//平均成绩…

java语言sql接口_Java语言SQL接口

Java语言SQL接口编辑锁定讨论上传视频《Java语言SQL接口》是1997年清华大学出版社出版的图书&#xff0c;作者是孙元等。本书覆盖了JDBC的各个方面&#xff0c;适合于有一定的Java语言编程基础和数据库及SQL语言基础的开发人员使用。作 者孙元 / …

java对docker_如何在docker中运行java程序

吃鸡游戏创建一个redis docker容器首先&#xff0c;我们先为redis创建一个DockerfileFROM ubuntu:12.10RUN apt-get updateRUN apt-get -y install redis-serverEXPOSE 6379ENTRYPOINT ["/usr/bin/redis-server"]现在你需要通过Dockerfile创建一个镜像&#xff0c;将…

java 文件树形_java 显示树形文件结构,类似windows的tree命令

本来是个练习题&#xff0c;自己做了做&#xff0c;还行。但是看到别人的代码比我的更好。所以&#xff0c;这里就贴出了别人的代码。我的就只有让它沉睡吧……。是别人的&#xff0c;算是转载吧。转自&#xff1a;他的电脑。主要思想&#xff0c;递归调用。import java.io.Fil…

hdfs的实验总结_实验2-熟悉常用的HDFS操作.doc

本文档下载自 文库下载网&#xff0c;/doc/d52aebffbb0d4a7302768e9951e79b896802689c.html实验2-熟悉常用的HDFS操作实验2熟悉常用的HDFS操作1实验目的1. 理解HDFS在Hadoop体系结构中的角色&#xff1b;2. 熟练使用HDFS操作常用的Shell命令&#xff1b;3. 熟悉HDFS操作常用的J…

java canvas 画图片_canvas画布——画八卦图

浏览器支持Internet Explorer 9、Firefox、Opera、Chrome 以及 Safari 支持 arc() 方法。注释&#xff1a;Internet Explorer 8 或更早的浏览器不支持 元素。定义和用法arc() 方法创建弧/曲线(用于创建圆或部分圆)。提示&#xff1a;如需通过 arc() 来创建圆&#xff0c;请把起…

计算两个数的乘积java编写_Java模拟计算机的整数乘积计算功能示例

本文实例讲述了Java模拟计算机的整数乘积计算功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;计算机计算整数乘积的原理&#xff1a;实现代码&#xff1a;package math;public class two {/*** Fundamental method* f(n) O(n^2)* param a* param b* return*/publ…

java使用linux常用命令_linux常用Java程序员使用命令(一)

pwd 显示当前路径cd切换目录 . .. ~ls显示文件(夹)-l 显示详细信息-a显示全部&#xff0c;包括隐藏文件(夹)mkdir创建文件夹-p递归创建touch创建空白文件echocat、tac、more、tail 查看文本内容rmdir删除空白文件夹rm-f 强制删除-r递归删除cp复制/新建文件mv移动/重命名find查找…

java中start与loop_java for-loop问题

我正在制作一个Java程序来计算Simpson的积分规则.这是我的代码.注意count 4,9,10,11的输出值中的第二列数字.它们不是我需要的数字,它们不遵循这种模式.我需要这些数字是准确的.发生了什么,我该如何解决&#xff1f;public static void main(String[] args){double totalS 0.…

java查询数据库的方式_Java连接各种数据库方式速查表

1、Oracle8/8i/9i数据库(thin模式)Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();String url"jdbc:oracle:thin:localhost:1521:orcl"; //orcl为数据库的SIDString user"test";String password"test";Connection c…

java多线程编程—高级主题_Java day20 高级编程【第一章】Java多线程编程

【第一章】Java多线程编程一.进程与线程多个时间段会有多个程序依次执行&#xff0c;但是同一时间点只有一个进程执行线程是在进程基础之上划分的更小的程序单元 &#xff0c;线程是在进程基础上创建并且使用的&#xff0c;所以线程依赖于进程的支持&#xff0c;但是来讲&#…

java object数组转实体类_详解Java中String JSONObject JSONArray List实体类转换

JSON使用阿里的fastJson为依赖包gradle依赖管理如下&#xff1a;compile group: "com.alibaba", name: "fastjson", version:"1.2.41"1、String转JSONObject前言&#xff1a;String 是JSONObject格式的字符串eg:JSONObject jSONObject JSONObje…

mysql中不要 秒的函数_Mysql中日期和时间函数应用不用求人 | 很文博客

对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型。这里是一个使用日期函数的例子。下面的查询选择了所有记录&#xff0c;其date_col的值是在最后30天以内&#xff1a;mysql> SELECT something FROM tableWHERE TO_DAYS(NOW()) - …

java实现log4j_log4j在java中实现

public class AccLogBase {/**致命错误. */public static final int LOG_LEVEL_FATAL 1;/** 错误. */public static final int LOG_LEVEL_ERROR 2;/** 警告. */public static final int LOG_LEVEL_WARN 3;/**信息. */public static final int LOG_LEVEL_INFO 4;/** debug. …

e x泰勒 java_maven project

最近没事了玩一下maven&#xff0c;使用maven管理工程中的依赖包非常的方便。建立maven web工程的时候开始不知道怎么用tomcat来调试&#xff0c;总是使用mave的tomcat插件发布了后来调试&#xff0c;觉得非常的麻烦&#xff0c;网上找了点材料&#xff0c;看看maven web工程不…

java定义说话方法_类定义的基本形式_Java语言程

类定义的基本形式_Java语言程4&#xff0e;2&#xff0e;1 类定义的基本形式前面一节我们已经了解了类和对象的概念&#xff0c;然而在实际编程过程中&#xff0c;该如何定义一个类以及类中的对象呢&#xff1f;在Java语言中&#xff0c;用户自己可以定义一个类&#xff0c;作…