其读取方法为:
import java.io.Fileimport java.io.FileNotFoundException
import java.io.IOException
import java.util.ArrayList
public class readFile {
private static ArrayList<String> listname = new ArrayList<String>()
public static void main(String[] args)throws Exception{
readAllFile("C:/Users/HP/Desktop")
System.out.println(listname.size())
}
public static void readAllFile(String filepath) {
File file= new File(filepath)
if(!file.isDirectory()){
listname.add(file.getName())
}else if(file.isDirectory()){
System.out.println("文件")
String[] filelist=file.list()
for(int i = 0i<filelist.lengthi++){
File readfile = new File(filepath)
if (!readfile.isDirectory()) {
listname.add(readfile.getName())
} else if (readfile.isDirectory()) {
readAllFile(filepath + "\\" + filelist[i])//递归
}
}
}
for(int i = 0i<listname.size()i++){
System.out.println(listname.get(i))
}
}
}
在请求头里设置Range,可以拿到不同的部分,前提还需要web server支持。
/**
* 开始下载
* @throws Exception
*/
public void startDown() throws Exception{
HttpClient httpClient = new DefaultHttpClient()
try {
//获取下载文件信息
getDownloadFileInfo(httpClient)
startDownloadThread()
//开始监视下载数据
monitor()
} catch (Exception e) {
throw e
} finally {
httpClient.getConnectionManager().shutdown()
}
}
/**
* 获取下载文件信息
*/
private void getDownloadFileInfo(HttpClient httpClient) throws IOException,
ClientProtocolException, Exception {
HttpHead httpHead = new HttpHead(url)
HttpResponse response = httpClient.execute(httpHead)
//获取HTTP状态码
int statusCode = response.getStatusLine().getStatusCode()
if(statusCode != 200) throw new Exception("资源不存在!")
if(getDebug()){
for(Header header : response.getAllHeaders()){
System.out.println(header.getName()+":"+header.getValue())
}
}
//Content-Length
Header[] headers = response.getHeaders("Content-Length")
if(headers.length > 0)
contentLength = Long.valueOf(headers[0].getValue())
httpHead.abort()
httpHead = new HttpHead(url)
httpHead.addHeader("Range", "bytes=0-"+(contentLength-1))
response = httpClient.execute(httpHead)
if(response.getStatusLine().getStatusCode() == 206){
acceptRanges = true
}
httpHead.abort()
}
/**
* 启动多个下载线程
* @throws IOException
* @throws FileNotFoundException
*/
private void startDownloadThread() throws IOException,
FileNotFoundException {
//创建下载文件
File file = new File(localPath)
file.createNewFile()
RandomAccessFile raf = new RandomAccessFile(file, "rw")
raf.setLength(contentLength)
raf.close()
//定义下载线程事件实现类
DownloadThreadListener listener = new DownloadThreadListener() {
public void afterPerDown(DownloadThreadEvent event) {
//下载完一个片段后追加已下载字节数
synchronized (object) {
DownloadTask.this.receivedCount += event.getCount()
}
}
public void downCompleted(DownloadThreadEvent event) {
//下载线程执行完毕后从主任务中移除
threads.remove(event.getTarget())
if(getDebug()){
System.out.println("剩余线程数:"+threads.size())
}
}
}
//不支持多线程下载时
if (!acceptRanges) {
if(getDebug()){
System.out.println("该地址不支持多线程下载")
}
//定义普通下载
DownloadThread thread = new DownloadThread(url, 0, contentLength, file, false)
thread.addDownloadListener(listener)
thread.start()
threads.add(thread)
return
}
//每个请求的大小
long perThreadLength = contentLength / threadCount + 1
long startPosition = 0
long endPosition = perThreadLength
//循环创建多个下载线程
do{
if(endPosition >= contentLength)
endPosition = contentLength - 1
DownloadThread thread = new DownloadThread(url, startPosition, endPosition, file)
thread.addDownloadListener(listener)
thread.start()
threads.add(thread)
startPosition = endPosition + 1//此处加 1,从结束位置的下一个地方开始请求
endPosition += perThreadLength
} while (startPosition < contentLength)
}
publicDataSet ImportExcel(string strFileName) //strFileName指定的路径+文件名.xls{
if (strFileName != "")
{
string conn = "Provider=Microsoft.Jet.OLEDB.4.0Data Source=" + strFileName + "Extended Properties=Excel 8.0"
string sql = "select * from [Sheet1$]"
OleDbDataAdapter da = newOleDbDataAdapter(sql, conn)
DataSet ds = newDataSet()
try
{
da.Fill(ds, "datatable")
}
catch
{
}
return ds
}
else
{
return null
}
}
这个方法我经常用,转成dataset和datatable没什么太大区别吧,反正ds.Tables[0]就是dataTable了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)