发表于: 2017-11-05 23:30:14
1 768
今天完成的事情:
1. 关闭oss链接后不能读取流数据问题解决
2. 图片迁移完成
明天计划的事情
1. 了解邮箱
2. 完结邮箱
遇到的问题:
无
收获:
1. 关闭oss链接后不能读取流数据问题解决
//把数据流缓存起来,就可以任意的读取数据了
ByteArrayOutputStream byteArrayOutputStream = null;
try {
//获取文件
ossObject = ossClient.getObject(bucketName, firstKey);
//获取文件元信息
ObjectMetadata metadata = ossObject.getObjectMetadata();
Long fileLength = metadata.getContentLength();
logAliOssUtil.info(name + " fileLength: " + fileLength);
InputStream in = ossObject.getObjectContent();
//获取文件流内容到缓存
byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
try {
while ((len = in.read(buffer)) > -1 ) {
byteArrayOutputStream.write(buffer, 0, len);
}
byteArrayOutputStream.flush();
} catch (IOException e) {
logAliOssUtil.error(e.getMessage(), e);
}
2. 获取指定目录下的所有文件信息
//指定一次性获取文件的数量
final int maxKeys = 200;
ObjectListing objectListing;
String nextMarker = null;
List<String> fileInformation = new LinkedList<String>();try {
//加入限定的条件
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
if (prefix != null) {
listObjectsRequest.setPrefix(prefix);
}
listObjectsRequest.setMaxKeys(maxKeys);
do {
//获取文件的信息
objectListing = ossClient.listObjects(listObjectsRequest);
List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
logAliOssUtil.info("" + sums.size());
for (OSSObjectSummary s : sums) {
fileInformation.add(s.getKey());
}
nextMarker = objectListing.getNextMarker();
} while (objectListing.isTruncated());
3 图片迁移完成
String type = "image";
String path = "image";
String prefix = "image/";
List<String> name = new LinkedList<String>();
//让list从下标为1处开始读取
int i= 1;
try {
name = fileService.listFileName(prefix);
logAliOss.info("" + name.size());
for (; i < name.size(); i++) {
String fileExt = name.get(i).substring(name.get(i).lastIndexOf(".") + 1).toLowerCase();
logAliOss.info(name.get(i));
//文件名自带图片路径所以不用加path
InputStream in = fileService.getFileStream(null, name.get(i));
logAliOss.info("in " + in.available());
//文件名自带图片路径所以不用加path
String message = tengXunCosUtil.uploadStream(null, name.get(i), in, type + "/" + fileExt);
in.close();
logAliOss.info(message)
4.JAVA的异常处理
Throwable 类是所有的异常的父类,是异常类的顶级父类
Throwable 分为两类: error 和 Exeption
error 是java 自己的错误,例如JVM出错,是不能被程序员所影响的
Exeption及其子类是程序员 编程或使用中出现的错误
异常分为两类:
非检查异常:error和RuntimeException ,意为不能再编译阶段所检察到的异常,例如空指针,当不输入的时候用可能报空指针
检查异常:IOException 和其他,是JAVA强制性的在编程阶段就必须要求处理的异常例如:
try {
while ((len = in.read(buffer)) > -1 ) {
byteArrayOutputStream.write(buffer, 0, len);
}
byteArrayOutputStream.flush();
} catch (IOException e) {
logAliOssUtil.error(e.getMessage(), e);
}
这些异常可能因为网络,磁盘等因素而发生,所以要求在程序中进行处理,方式两种:try cach 或者 throws
前者可以处理异常,而后者只能把异常抛出,不能进行处理。
如果某个方法出现了异常,作为调用他的方法以及以上的所有方法都会被影响,而被抛出的这些异常形成异常追踪栈例如:
最开始为异常的类型,
1.为异常的最开始发生的地方 at 类名.方法名(文件名:异常代码)
2. 调用这个异常的方法
3. 以此向下,是异常不断地被追踪,抛向上一层调用的方法,直到顶层调用的方法
这就是异常的冒泡
异常的处理方式有两种:
1. try catch finly
try : 程序正常进行的代码,如果发生异常 则匹配catch进行处理
catch: 当异常发生后用caech进行匹配异常,进行处理,如果未能匹配到就先运行finly 然后把异常抛给上一层调用产生异常方法的方法。
finly: 无论是否发生异常都要执行,主要做清理工作
以上的块里定义的变量为局部变量,之间不能相互调用
2. throws
他可以抛出异常但需要提前声明异常类型,而且也不能处理异常
finaly和return
在 try块中即便有return,break,continue等改变执行流的语句,finally也会执行。
即对于try catch finaly才是最终运行的,
如果在finly里写return 则try catch里的return 就会被覆盖
如果一个写有异常的方法(1)调用另一个异常的方法(2)(此方法finaly有返回值)
,则在2方法里抛出异常,而以为1方法接受到了2方法finaly里的返回值,则不抛异常。认为2方法正常
如果一个写有Expcetion IO异常的方法(1)调用另一个catch IO异常的方法(2)(此方法finaly有new NULL异常)
如果方法2里发生了IO异常 但是以为执行了finaly则向上层抛出NULL异常,IO异常被覆盖了
所以:
- 不要在fianlly中使用return。
- 不要在finally中抛出异常。
- 减轻finally的任务,不要在finally中做一些其它的事情,finally块仅仅用来释放资源是最合适的。
- 将尽量将所有的return写在函数的最后面,而不是try ... catch ... finally中。
进度:
任务开始时间:10.30
预计完成时间:11.6
有,东西多,不好整合
禅道:http://task.ptteng.com/zentao/project-task-264.htm
评论