说明:怎么样读取阿里云服务器的文件并导出到本地excle 来统计阿里云存放多少文件呢?下面的代码详细给你介绍:
package util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.util.List;
import java.util.Map;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import com.aliyun.openservices.ClientConfiguration;
import com.aliyun.openservices.oss.OSSClient;
import com.aliyun.openservices.oss.model.ListObjectsRequest;
import com.aliyun.openservices.oss.model.OSSObject;
import com.aliyun.openservices.oss.model.OSSObjectSummary;
import com.aliyun.openservices.oss.model.ObjectListing;
import com.aliyun.openservices.oss.model.ObjectMetadata;
/**
* Created by helenon 2017/1/5.
*/
public class Test {
private static final String ACCESS_ID = "";//阿里云服务器ACCESS_ID
private static final String ACCESS_KEY = "";//阿里云服务器ACCESS_KEY
private static final String OSS_ENDPOINT = "http://oss.aliyuncs.com/";
private static final String BUCKET_NAME = ";//阿里云服务器BUCKET_NAME
public static void main(String[] args) {
pageObject();
}
//分页获取所有Object,每页maxKeys条Object。
public static void pageObject() {
// 可以使用ClientConfiguration对象设置代理服务器、最大重试次数等参数。
ClientConfiguration config = new ClientConfiguration();
OSSClient ossClient = new OSSClient(OSS_ENDPOINT, ACCESS_ID, ACCESS_KEY, config);
final int maxKeys = 1000;//最大记录
String nextMarker = null;
File file=new File("D:/helen.xls");//excle 存放路径
WritableWorkbook workbook =null;
WritableSheet sheet=null;
OutputStream os = null;
ObjectListing listing=null;
int i = 0;
double sumSize = 0;//总大小
try {
os = new FileOutputStream(file);
workbook = Workbook.createWorkbook(os);
//创建新的一页
sheet = workbook.createSheet("First Sheet", 0);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
do {
// 构造ListObjectsRequest请求
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(BUCKET_NAME);
listObjectsRequest.setPrefix("helen/view");
listObjectsRequest.setMarker(nextMarker);
listObjectsRequest.setMaxKeys(maxKeys);
listing = ossClient.listObjects(listObjectsRequest);
List
for (OSSObjectSummary s : sums) {
try {
String size=getPrintSize(s.getSize());
System.out.println("文件名:"+s.getKey() + " --- 文件大小:" + size );
i++;
Label title1 = new Label(0,0,"文件名");
sheet.addCell(title1);
Label title2 = new Label(1,0,"文件大小");
sheet.addCell(title2);
Label filename = new Label(0,i,s.getKey());
sheet.addCell(filename);
Label fileSize = new Label(1,i,size);
sheet.addCell(fileSize);
double t = s.getSize()/1000000;
sumSize += t;
} catch (RowsExceededException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(sumSize + " M");
nextMarker = listing.getNextMarker();
} while (listing.isTruncated());
try {
workbook.write();
workbook.close();
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//字节转换
public static String getPrintSize(long size) {
//如果字节数少于1024,则直接以B为单位,否则先除于1024,后3位因太少无意义
if (size < 1024) {
return String.valueOf(size) + "B";
} else {
size = size / 1024;
}
//如果原字节数除于1024之后,少于1024,则可以直接以KB作为单位
//因为还没有到达要使用另一个单位的时候
//接下去以此类推
if (size < 1024) {
return String.valueOf(size) + "KB";
} else {
size = size / 1024;
}
if (size < 1024) {
//因为如果以MB为单位的话,要保留最后1位小数,
//因此,把此数乘以100之后再取余
size = size * 100;
return String.valueOf((size / 100)) + "."
+ String.valueOf((size % 100)) + "MB";
} else {
//否则如果要以GB为单位的,先除于1024再作同样的处理
size = size * 100 / 1024;
return String.valueOf((size / 100)) + "."
+ String.valueOf((size % 100)) + "GB";
}
}
}