发表于: 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





返回列表 返回列表
评论

    分享到