List item
数据越界
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at img.test.main(test.java:14)
解决
检查读取数组时是否试图取出索引没有的数据。
例:当list有2个数据,当你试图取出第三个数据则这个异常
解决方法:检查是否代码错写,或者加异常处理
问题2
io流的重复使用
例子:从网络获取图片流,将此图片进行截图,并且返回图片流的二进制数组
/**
* 通过图片url截图
* @param url_img 图片链接
* @param outFile输出文件
* @param ext 图片的格式
* @param x坐标
* @param y坐标
* @param width宽度
* @param height高度
* @return
*/
public static byte[] cutUrlPic(String url_img, String outPath, String ext, int x, int y, int width, int height) {
//outPath: 存储固定位置
ImageInputStream iis = null;
InputStream is = null;
String res = null;
byte[] data = null;
try {
URL url = new URL(url_img);
// 打开连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(6 * 1000);
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36");
conn.connect();
// 输入流
is = conn.getInputStream();
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
data = outStream.toByteArray();
//System.out.println(data[0]);
// res = ImageByteUtil.byte2hex(data);
outStream.close();
is = new ByteArrayInputStream(data);
// ImageReader声称能够解码指定格式
Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(ext);
ImageReader reader = it.next();
// 获取图片流
iis = ImageIO.createImageInputStream(is);
// 输入源中的图像将只按顺序读取
reader.setInput(iis, true);
// 描述如何对流进行解码
ImageReadParam param = reader.getDefaultReadParam();
// 图片裁剪区域
Rectangle rect = new Rectangle(x, y, width, height);
// 提供一个 BufferedImage,将其用作解码像素数据的目标
param.setSourceRegion(rect);
// 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象
BufferedImage bi = reader.read(0, param);
// 保存新图片
File tempOutFile = new File(outPath);
if (!tempOutFile.exists()) {
tempOutFile.mkdirs();
}
ImageIO.write(bi, ext, new File(outPath ));
// return true;
} catch (Exception e) {
logger.error(e.getMessage(), e);
//e.printStackTrace();
// return false;
} finally {
try {
if (iis != null) {
iis.close();
}
if(is!=null){
is.close();
}
} catch (IOException e) {
logger.error(e.getMessage(), e);
//e.printStackTrace();
// return false;
}
}
return data;
}
问题3
不合法参数
[2018/09/01 20:32:25]-[ERROR]-com.bayside.crawler.qingdaocollect.TrademarkMainCollect.homeImg(TrademarkMainCollect.java:181)
java.lang.IllegalArgumentException
at java.sql.Date.valueOf(Unknown Source)
at com.bayside.crawler.qingdaocollect.TrademarkMainCollect.homeImg(TrademarkMainCollect.java:159)
at com.bayside.crawler.qingdaocollect.TrademarkMainCollect.shangbiaoCollect(TrademarkMainCollect.java:65)
at com.bayside.crawler.qingdaocollect.TrademarkMainCollect.main(TrademarkMainCollect.java:39)
[2018/09/01 20:32:30]-[ERROR]-com.bayside.crawler.qingdaocollect.TrademarkMainCollect.homeImg(TrademarkMainCollect.java:181)
解决:
此次的问题是传入到数据库的参数不是数据库要的,所以报错。
将参数改成他能接收的就行
问题MySQL
违反了键的唯一性
[2018/09/01 21:15:48]-[ERROR]-com.bayside.crawler.qingdaocollect.SimilarToPicture.db(SimilarToPicture.java:77) Duplicate entry 'e48b92f1655cc3a401655f9862966366-14258069' for key 'compare_unIque'
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'e48b92f1655cc3a401655f9862966366-14258069' for key 'compare_unIque'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2643)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2077)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2362)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2280)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2265)
at com.bayside.crawler.qingdaocollect.SimilarToPicture.db(SimilarToPicture.java:74)
at com.bayside.crawler.qingdaocollect.TrademarkMainCollect.homeImg(TrademarkMainCollect.java:140)
at com.bayside.crawler.qingdaocollect.TrademarkMainCollect.shangbiaoCollect(TrademarkMainCollect.java:61)
at com.bayside.crawler.qingdaocollect.StartCollect$CollectThread.shangBiaoCollect(StartCollect.java:66)
at com.bayside.crawler.qingdaocollect.StartCollect$CollectThread.run(StartCollect.java:52)
解决方法:
查看此键是否已经在数据库存在,如果已经存在则就会报这个错误,可以根据需要,将数据库里的删除或者做异常处理,将此id跳过
空指针异常
所谓的空指针异常,就是一个指针是空指针,你还要去操作它,既然它指向的是空对象,它就不能使用这个对象的方法。比如上面的s假如为null,你还要用s的方法,比如s.equals( String x);那么就会产生空指针异常。
[2018/09/01 21:15:56]-[ERROR]-com.bayside.crawler.qingdaocollect.TrademarkMainCollect.homeImg(TrademarkMainCollect.java:186)
java.lang.NullPointerException
at com.bayside.crawler.qingdaocollect.util.ImageByteUtil.byteToString(ImageByteUtil.java:47)
at com.bayside.crawler.qingdaocollect.ImgInfoCollect.ImagePage(ImgInfoCollect.java:36)
at com.bayside.crawler.qingdaocollect.TrademarkCollect.image(TrademarkCollect.java:47)
at com.bayside.crawler.qingdaocollect.TrademarkMainCollect.homeImg(TrademarkMainCollect.java:147)
at com.bayside.crawler.qingdaocollect.TrademarkMainCollect.shangbiaoCollect(TrademarkMainCollect.java:61)
at com.bayside.crawler.qingdaocollect.StartCollect$CollectThread.shangBiaoCollect(StartCollect.java:66)
at com.bayside.crawler.qingdaocollect.StartCollect$CollectThread.run(StartCollect.java:52)
解决:
在调用某个对象之前,要进行非空的验证,否则就容易出空指针异常。
问题
json字符串格式的问题
[2018/09/01 22:00:02]-[ERROR]-com.bayside.crawler.qingdaocollect.TrademarkMainCollect.homeImg(TrademarkMainCollect.java:144) Unexpected character ('A' (code 65)): was expecting comma to separate OBJECT entries
at [Source: java.io.StringReader@40b7341a; line: 1, column: 17]
org.codehaus.jackson.JsonParseException: Unexpected character ('A' (code 65)): was expecting comma to separate OBJECT entries
at [Source: java.io.StringReader@40b7341a; line: 1, column: 17]
at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1433)
at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:521)
at org.codehaus.jackson.impl.JsonParserMinimalBase._reportUnexpectedChar(JsonParserMinimalBase.java:442)
at org.codehaus.jackson.impl.ReaderBasedParser.nextToken(ReaderBasedParser.java:406)
at org.codehaus.jackson.map.deser.std.MapDeserializer._readAndBind(MapDeserializer.java:304)
at org.codehaus.jackson.map.deser.std.MapDeserializer.deserialize(MapDeserializer.java:249)
at org.codehaus.jackson.map.deser.std.MapDeserializer.deserialize(MapDeserializer.java:33)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2732)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1863)
at com.bayside.crawler.qingdaocollect.TrademarkMainCollect.homeImg(TrademarkMainCollect.java:137)
at com.bayside.crawler.qingdaocollect.TrademarkMainCollect.shangbiaoCollect(TrademarkMainCollect.java:61)
at com.bayside.crawler.qingdaocollect.StartCollect$CollectThread.shangBiaoCollect(StartCollect.java:66)
at com.bayside.crawler.qingdaocollect.StartCollect$CollectThread.run(StartCollect.java:52)
解决:
检查json字符串的格式是否不对
maven创建src/main/java报错
The folder is already a source folder
https://www.cnblogs.com/loger1995/p/6539139.html
问题 missing artifact org.xerial.snappy:snappy-java:jar:1.1.7.1
解决:适用于我自己,将maven的配置文件取消,然后将下载的文件从c:\user\xxxx.m2
中复制到自己设的本地仓库文件,将配置加入。更新,成功。
父类调用子类重写的方法
重载:重载的时候,方法名要一样,但是参数类型或个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。
覆写(重写):若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法
1.新建一个子类对象时,它首先执行它父类的构造方法然后再执行子类的构造方法。
2.我们new一个子类对象赋给父类(父类的引用指向了子类的对象,也就是说java里说的多态),父类对象不可以调用子类的方法,但如果子类重写了父类的某个方法,则此时父类调用的是子类方法的内容。
中文乱码问题
1.改工作空间的编码
window - preferences - general - workspace
2.修改项目的编码
右键项目 - properties - resource
3.修改大哥文件的编码(当前两个不管用的时候,看看这个文件是不是编码没有更改)
右键单个文件 - properties - resource
问题 在使用Java抓取网页源码时一些数据丢失
1.好好找找在源码的另一个地方是不是存在
2.jsoup
3.httpclient
4.模拟浏览器
问题 json数据中部分或者全部缺少双引号
解决:
import com.alibaba.fastjson.JSONObject;
String string = JSONObject.parse(jsonVideo).toString();
base64转码编码
final Base64.Decoder decoder = Base64.getDecoder();
final Base64.Encoder encoder = Base64.getEncoder();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//编码
final String encodedText = encoder.encodeToString(textByte);
System.out.println(encodedText);
//解码
System.out.println(new String(decoder.decode(encodedText), "UTF-8"));
final Base64.Decoder decoder = Base64.getDecoder();
final Base64.Encoder encoder = Base64.getEncoder();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//编码
final String encodedText = encoder.encodeToString(textByte);
System.out.println(encodedText);
//解码
System.out.println(new String(decoder.decode(encodedText), "UTF-8"));
问题:json字符串以中括号开始的处理方法
String pdJson = "[{"1":"2"}]";
ObjectMapper mapper = new ObjectMapper();
List<Map<String, Object>> list = null;
try {
list = mapper.readValue(pdJson, ArrayList.class);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
问题:java post表单方式访问
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
public static String httpPostWithJSON(String url, Map<String, String> paramMap, Map<String, String> headerMap, Map<String, String> proxyMap) {
HttpPost httpPost = new HttpPost(url);
CloseableHttpClient client = HttpClients.createDefault();
String respContent = null;
// json方式
// JSONObject jsonParam = new JSONObject();
// jsonParam.put("name", "admin");
// jsonParam.put("pass", "123456");
// StringEntity entity = new StringEntity(jsonParam.toString(),"utf-8");//解决中文乱码问题
// entity.setContentEncoding("UTF-8");
// entity.setContentType("application/json");
// httpPost.setEntity(entity);
// System.out.println();
// 表单方式
List<BasicNameValuePair> pairList = new ArrayList<BasicNameValuePair>();
//代理
if (proxyMap == null ||proxyMap.isEmpty()) {
}else {
String proxyIp = proxyMap.get("ip");
String proxyPort = proxyMap.get("port");
pairList.add(new BasicNameValuePair("ip", proxyIp));
pairList.add(new BasicNameValuePair("port", proxyPort));
}
//header
pairList.add(new BasicNameValuePair("user-agent", "Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; M032 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30"));
for (Map.Entry<String, String> map: headerMap.entrySet()) {
pairList.add(new BasicNameValuePair(map.getKey(), map.getValue()));
}
//param
for (Map.Entry<String, String> map: paramMap.entrySet()) {
pairList.add(new BasicNameValuePair(map.getKey(), map.getValue()));
}
try {
httpPost.setEntity(new UrlEncodedFormEntity(pairList, "utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
HttpResponse resp = null;
try {
resp = client.execute(httpPost);
} catch (IOException e) {
e.printStackTrace();
}
if(resp.getStatusLine().getStatusCode() == 200) {
HttpEntity he = resp.getEntity();
try {
respContent = EntityUtils.toString(he,"UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
}
return respContent;
}
表情无法存到sql中
特殊表情无法存到sql中,搜索说要改sql配置,并不想改可以这样
StringEscapeUtils.escapeSql(内容)
转载自 https://www.cnblogs.com/smallfa/news/2016/11/30/6116754.html