❶ java中怎樣從文件中讀取數據
分為讀位元組,讀字元兩種讀法x0dx0a◎◎◎FileInputStream 位元組輸入流讀文件◎◎◎x0dx0apublic class Maintest {x0dx0ax0dx0apublic static void main(String[] args) throws IOException {x0dx0ax0dx0aFile f=new File("G:\\just for fun\\xiangwei.txt");x0dx0ax0dx0aFileInputStream fin=new FileInputStream(f);x0dx0ax0dx0abyte[] bs=new byte[1024];x0dx0ax0dx0aint count=0;x0dx0awhile((count=fin.read(bs))>0)x0dx0a{x0dx0ax0dx0aString str=new String(bs,0,count);//反復定義新變數:每一次都 重新定義新變數,接收新讀取的滾雹數據x0dx0ax0dx0aSystem.out.println(str);//反復輸出新變數:察槐每一次都 輸出重大沒帆新定義的新變數x0dx0a}x0dx0afin.close();x0dx0a}x0dx0a}x0dx0ax0dx0a◎◎◎FileReader 字元輸入流讀文件◎◎◎x0dx0apublic class Maintest {x0dx0apublic static void main(String[] args) throws IOException {x0dx0ax0dx0aFile f=new File("H:\\just for fun\\xiangwei.txt");x0dx0ax0dx0aFileReader fre=new FileReader(f);x0dx0ax0dx0aBufferedReader bre=new BufferedReader(fre);x0dx0ax0dx0aString str="";x0dx0awhile((str=bre.readLine())!=null)//●判斷最後一行不存在,為空x0dx0a{x0dx0aSystem.out.println(str);x0dx0a}x0dx0abre.close();x0dx0a fre.close();x0dx0ax0dx0a}x0dx0ax0dx0a}
❷ java 大量數據如何快速讀取
1.將與查詢條件相關的欄位設置索引
2.建立視圖
3.對於頻繁查詢操作建議使用存儲過程
4.優化Sql語句
❸ java如何快速處理大數據
文件讀取:首先是一個文件上傳,數據入庫,10-200萬條不等,這里主要考慮到一次性讀取,JVM分配出來的棧內存不一定會夠(個人對內存這一塊還是處於一知半解的狀態,所以比較謹慎,若諸位大神有好寬隱的認知,希望評論留下地址分享一下),是依行讀取數據,設定一個批量值,當讀取的數據達到一定量之後,執行批量入庫操作,清空集合,再接著讀取。
//讀取文件內容
while((s = br.readLine())!=null){
//判斷是否達到單次處理量
if(num%leadingNum==0&&num!=0){
int a = stencDao.insertBatch(listBean);
if(a!=leadingNum){
flag = false;
}
//清空集合
listBean.clear();
}
String value = s.trim();
//將讀取到的內容放入集合中
if(!value.equals("")){
StencilCustomer bean = new StencilCustomer();
bean.setCustomerPhone(value);
bean.setLinkStencilId(id);
listBean.add(bean);
num ++;
}
}
數據處理:這里的思路也是將數據小化然後處理,這里使用了多線程,設定單個線程處理量,然後開啟多個線程處理,這里需要考慮你的伺服器的承載能力,如果線程開得太多了,處理不過數敏來,會出現蹦死的情況。慎畢廳例如200萬數據,我開了20個線程,單個線程處理600條。
//建立一個線程池 ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
minTaskNumber, maxTaskNumber, 3L, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(minTaskNumber),
new ThreadPoolExecutor.DiscardOldestPolicy());
//當正在執行的線程數達到最大執行線程數的時候等待
boolean flag = true;
while(flag){
Thread.sleep(1000);//休眠2ms查詢一次
int c = threadPool.getActiveCount();//線程池中活動中的線程數量
if(c<maxTaskNumber){
flag = false;
}
}
上面的代碼是我對線程池的一個控制,控制伺服器一直最大線程執行,Thread.sleep(1000);用while的時候,這個休眠最好不要去掉,去掉之後很影響執行效率
❹ 如何利用Java高效讀取大文件,利用Java讀取文件
可以使用BufferedReader解決高效讀取大文件:
具體如下:
例如:BufferedReaderbr=newBufferedReader(newInputStreamReader(inputStream)
❺ 淺談JAVA讀寫Excel的幾種途徑
讀寫Excel文件需要使用Excel類庫,如Free Spire.XLS for Java.
讀取Excel內容:
//創建Workbook對象
Workbookwb=newWorkbook();
//載入一個Excel文檔
wb.loadFromFile("C:\Users\Administrator\Desktop\test.xlsx");
//獲取第一個工作表
Worksheetsheet=wb.getWorksheets().get(0);
//遍歷工作表的每一行
for(inti=1;i<sheet.getLastRow()+1;i++){
//遍歷工作的每一列
for(intj=1;j<sheet.getLastColumn()+1;j++){
//輸出指定單元格的數據
System.out.print(sheet.get(i,j).getText());
System.out.print(" ");
}
System.out.print("
");
}
寫入內容:
//創建Workbook對象
Workbookwb=newWorkbook();
//載入一個Excel文檔
wb.loadFromFile("C:\Users\Administrator\Desktop\test.xlsx");
//獲取第一個工作表
Worksheetsheet=wb.getWorksheets().get(0);
//在單元格A1寫入新數據
sheet.getCellRange("A1").setText("你好");
//保存文檔
wb.saveToFile("寫入Excel.xlsx",ExcelVersion.Version2016);
❻ Java 如何讀取目錄下的文件內容
Java讀取目錄下的文件內容,使用的是java的文件類,示例如下:
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileReader;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.RandomAccessFile;
importjava.io.Reader;
publicclassReadFromFile{
/**
*以位元組為單位讀取文件,常用於讀二進制文件,如圖片、聲音、影像等文件。
*
*@paramfileName
*文件的名
*/
(StringfileName){
Filefile=newFile(fileName);
InputStreamin=null;
try{
System.out.println("以位元組為單位讀取文件內容,一次讀一個位元組:");
//一次讀一個位元組
in=newFileInputStream(file);
inttempbyte;
while((tempbyte=in.read())!=-1){
System.out.write(tempbyte);
}
in.close();
}catch(IOExceptione){
e.printStackTrace();
return;
}
try{
System.out.println("以位元組為單位讀取文件內容,一次讀多個位元組:");
//一次讀多個位元組
byte[]tempbytes=newbyte[100];
intbyteread=0;
in=newFileInputStream(fileName);
ReadFromFile.showAvailableBytes(in);
//讀入多個位元組到位元組數組中,byteread為一次讀入的位元組數
while((byteread=in.read(tempbytes))!=-1){
System.out.write(tempbytes,0,byteread);
}
}catch(Exceptione1){
e1.printStackTrace();
}finally{
if(in!=null){
try{
in.close();
}catch(IOExceptione1){
}
}
}
}
/**
*以字元為單位讀取文件,常用於讀文本,數字等類型的文件
*
*@paramfileName
*文件名
*/
(StringfileName){
Filefile=newFile(fileName);
Readerreader=null;
try{
System.out.println("以字元為單位讀取文件內容,一次讀一個位元組:");
//一次讀一個字元
reader=newInputStreamReader(newFileInputStream(file));
inttempchar;
while((tempchar=reader.read())!=-1){
//對於windows下,
這兩個字元在一起時,表示一個換行。
//但如果這兩個字元分開顯示時,會換兩次行。
//因此,屏蔽掉
,或者屏蔽
。否則,將會多出很多空行。
if(((char)tempchar)!='
'){
System.out.print((char)tempchar);
}
}
reader.close();
}catch(Exceptione){
e.printStackTrace();
}
try{
System.out.println("以字元為單位讀取文件內容,一次讀多個位元組:");
//一次讀多個字元
char[]tempchars=newchar[30];
intcharread=0;
reader=newInputStreamReader(newFileInputStream(fileName));
//讀入多個字元到字元數組中,charread為一次讀取字元數
while((charread=reader.read(tempchars))!=-1){
//同樣屏蔽掉
不顯示
if((charread==tempchars.length)
&&(tempchars[tempchars.length-1]!='
')){
System.out.print(tempchars);
}else{
for(inti=0;i<charread;i++){
if(tempchars[i]=='
'){
continue;
}else{
System.out.print(tempchars[i]);
}
}
}
}
}catch(Exceptione1){
e1.printStackTrace();
}finally{
if(reader!=null){
try{
reader.close();
}catch(IOExceptione1){
}
}
}
}
/**
*以行為單位讀取文件,常用於讀面向行的格式化文件
*
*@paramfileName
*文件名
*/
(StringfileName){
Filefile=newFile(fileName);
BufferedReaderreader=null;
try{
System.out.println("以行為單位讀取文件內容,一次讀一整行:");
reader=newBufferedReader(newFileReader(file));
StringtempString=null;
intline=1;
//一次讀入一行,直到讀入null為文件結束
while((tempString=reader.readLine())!=null){
//顯示行號
System.out.println("line"+line+":"+tempString);
line++;
}
reader.close();
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(reader!=null){
try{
reader.close();
}catch(IOExceptione1){
}
}
}
}
/**
*隨機讀取文件內容
*
*@paramfileName
*文件名
*/
(StringfileName){
RandomAccessFilerandomFile=null;
try{
System.out.println("隨機讀取一段文件內容:");
//打開一個隨機訪問文件流,按只讀方式
randomFile=newRandomAccessFile(fileName,"r");
//文件長度,位元組數
longfileLength=randomFile.length();
//讀文件的起始位置
intbeginIndex=(fileLength>4)?4:0;
//將讀文件的開始位置移到beginIndex位置。
randomFile.seek(beginIndex);
byte[]bytes=newbyte[10];
intbyteread=0;
//一次讀10個位元組,如果文件內容不足10個位元組,則讀剩下的位元組。
//將一次讀取的位元組數賦給byteread
while((byteread=randomFile.read(bytes))!=-1){
System.out.write(bytes,0,byteread);
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(randomFile!=null){
try{
randomFile.close();
}catch(IOExceptione1){
}
}
}
}
/**
*顯示輸入流中還剩的位元組數
*
*@paramin
*/
(InputStreamin){
try{
System.out.println("當前位元組輸入流中的位元組數為:"+in.available());
}catch(IOExceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args){
StringfileName="C:/temp/newTemp.txt";
ReadFromFile.readFileByBytes(fileName);
ReadFromFile.readFileByChars(fileName);
ReadFromFile.readFileByLines(fileName);
ReadFromFile.readFileByRandomAccess(fileName);
}
}