主頁 > 後端開發 > Java操作Excel工具類(poi)

Java操作Excel工具類(poi)

2021-02-25 06:15:18 後端開發

 分享一個自己做的poi工具類,寫不是很完全,足夠我自己當前使用,有興趣的可以自行擴展

  1 import org.apache.commons.lang3.exception.ExceptionUtils;
  2 import org.apache.poi.hssf.usermodel.HSSFDataFormat;
  3 import org.apache.poi.hssf.usermodel.HSSFSheet;
  4 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  5 import org.apache.poi.hssf.util.CellReference;
  6 import org.apache.poi.ss.usermodel.*;
  7 import org.apache.poi.ss.util.CellRangeAddress;
  8 import org.apache.poi.ss.util.RegionUtil;
  9 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 10 import java.io.File;
 11 import java.io.FileInputStream;
 12 import java.io.FileOutputStream;
 13 import java.io.IOException;
 14 import java.util.List;
 15 
 16 public class ExcelWriterUtil_Poi {
 17 
 18 
 19    // 用于存放結果表內容的xlsx格式的作業簿
 20    private XSSFWorkbook xssfWorkbook = null;
 21    // 用于存放結果表內容的xls格式的作業簿
 22    private HSSFWorkbook hssfWorkbook = null;
 23    // 作業的sheet頁
 24    private Sheet sheet;
 25    // 用于讀取用例表內容復制到結果標的檔案輸出流
 26    private FileOutputStream stream = null;
 27    // 用于存盤結果表的路徑的成員變數,便于在保存結果時進行判斷
 28    private String path = null;
 29    // 單元格格式
 30    private CellStyle style = null;
 31    // 表的總行數
 32    public int rows = 0;
 33    private String sheetName="Sheet1";//初始化默認給一個sheet名字
 34    private FileInputStream in =null;
 35    private String resultType=null;
 36 
 37    /**
 38     *  獲取當前操作sheet的名稱
 39     * @return
 40     */
 41    public String getSheetName() {
 42 
 43       return sheetName;
 44    }
 45 
 46    /**
 47     * 根據名字切換sheet進行操作 // 指定作業sheet
 48     *
 49     * @param sheetName
 50     */
 51    public void useSheet(String sheetName) {
 52 
 53       this.sheetName = sheetName;
 54       try {
 55          if (resultType.equals(".xlsx")) {
 56             sheet = xssfWorkbook.getSheet(getSheetName());
 57             if (sheet == null) {
 58                return;
 59             }
 60 
 61          } else if (resultType.equals(".xls")) {
 62             sheet = hssfWorkbook.getSheet(getSheetName());
 63             if (sheet == null) {
 64                return;
 65             }
 66          }
 67          rows = sheet.getPhysicalNumberOfRows();
 68 
 69          sheet.setForceFormulaRecalculation(true);    //重繪公式
 70 
 71       } catch (Exception e) {
 72          System.out.println(ExceptionUtils.getStackTrace(e));
 73       }
 74 
 75 
 76    }
 77 
 78    /**
 79     *   修改當前sheet的名稱
 80     * @param sheetName
 81     */
 82     public void updateSheetName(String sheetName){
 83        try {
 84           if (resultType.equals(".xlsx")) {
 85              sheet = xssfWorkbook.getSheet(getSheetName());
 86              if(sheet == null) {
 87                 return;
 88              }
 89              int indexSheet = xssfWorkbook.getSheetIndex(sheet);
 90              xssfWorkbook.setSheetName(indexSheet,sheetName);
 91 
 92           }else if(resultType.equals(".xls")){
 93              sheet = hssfWorkbook.getSheet(getSheetName());
 94              if(sheet == null) {
 95                 return;
 96              }
 97              int indexSheet = hssfWorkbook.getSheetIndex(sheet);
 98              hssfWorkbook.setSheetName(indexSheet,sheetName);
 99           }
100        }catch (Exception e){
101           System.out.println(ExceptionUtils.getStackTrace(e));
102        }
103     }
104 
105    /**
106     *  關閉檔案輸入流
107     */
108    public void closeStream() {
109             try {
110                in.close();
111             } catch (IOException e) {
112                // TODO Auto-generated catch block
113                e.printStackTrace();
114             }
115    }
116    /*
117     * 根據模板 path1,創建path2,將path1中的內容復制到path2中
118     * @param path1模板表路徑
119     *          path2新生表路徑
120     */
121    public ExcelWriterUtil_Poi(String path1, String path2) {
122       // 截取模板表后綴名
123       String Origintype = path1.substring(path1.lastIndexOf("."));
124       // 判斷是xls還是xlsx格式,完成在記憶體中創建模板表的作業簿
125       XSSFWorkbook xssfWorkbookRead = null;
126       HSSFWorkbook hssfWorkbookRead = null;
127       if (Origintype.equals(".xlsx")) {
128          try {
129             xssfWorkbookRead = new XSSFWorkbook(new File(path1));
130          } catch (Exception e) {
131             System.out.println(ExceptionUtils.getStackTrace(e));
132          }
133       }
134       if (Origintype.equals(".xls")) {
135          try {
136             hssfWorkbookRead = new HSSFWorkbook(new FileInputStream(new File(path1)));
137          } catch (Exception e) {
138             System.out.println(ExceptionUtils.getStackTrace(e));
139          }
140       }
141       // 如果兩種格式均不符合,則檔案打開失敗
142       if (xssfWorkbookRead == null && hssfWorkbookRead == null) {
143          System.out.println("Excel檔案打開失敗!");
144          return;
145       }
146 
147       // 截取結果表后綴名
148        resultType = path2.substring(path2.lastIndexOf("."));
149       // 確定結果表格式為excel格式
150       if (resultType.equals(".xlsx") || resultType.equals(".xls")) {
151          try {
152             // 根據新生表的檔案名,為該檔案在記憶體中開辟空間
153             File file = new File(path2);
154             try {
155                // 在磁盤上面創建該檔案
156                file.createNewFile();
157             } catch (Exception e1) {
158                // 創建失敗,提示路徑非法,并停止創建
159                System.out.println(ExceptionUtils.getStackTrace(e1));
160                return;
161             }
162             // 基于新生表,創建檔案輸出流stream
163             stream = new FileOutputStream(file);
164             // 將用例表中的內容寫入檔案輸出流stream
165             if (hssfWorkbookRead != null) {
166                hssfWorkbookRead.write(stream);
167                // 關閉用例表在記憶體中的副本
168                hssfWorkbookRead.close();
169             } else {
170                xssfWorkbookRead.write(stream);
171                xssfWorkbookRead.close();
172             }
173             // 關閉已經寫入了用例表內容的檔案流
174             stream.close();
175             // 基于新生表,創建檔案輸入流
176              in = new FileInputStream(file);
177             // 判斷結果檔案的后綴是03版還是07版excel
178             if (resultType.equals(".xlsx")) {
179                try {
180                   //通過檔案輸入流,在記憶體中創建結果表的作業簿
181                   xssfWorkbook = new XSSFWorkbook(in);
182                   System.out.println(getSheetName());
183                   sheet = xssfWorkbook.getSheet(getSheetName());
184          
185                } catch (Exception e) {
186                   System.out.println(ExceptionUtils.getStackTrace(e));
187                }
188             }
189             if (resultType.equals(".xls")) {
190                try {
191                   hssfWorkbook = new HSSFWorkbook(in);
192                   sheet = hssfWorkbook.getSheet(getSheetName());
193                } catch (Exception e) {
194                   System.out.println(ExceptionUtils.getStackTrace(e));
195                }
196             }
197             rows = sheet.getPhysicalNumberOfRows();
198             //將成員變數結果檔案路徑賦值為path2,表示結果表已經成功創建,
199             path = path2;
200 
201          } catch (Exception e) {
202             System.out.println( ExceptionUtils.getStackTrace(e));
203          }
204       } else {
205          System.out.println("寫入的檔案格式錯誤!");
206       }
207    }
208 
209    /**
210     *  創建指定名稱的sheet
211     * @param sheetName
212     */
213    public void createSheet(String sheetName){
214       if(xssfWorkbook != null){
215          sheet=xssfWorkbook.createSheet(sheetName);
216       }else if(hssfWorkbook!=null){
217          sheet=hssfWorkbook.createSheet(sheetName);
218       }
219       rows = sheet.getPhysicalNumberOfRows();
220    }
221 
222 
223 
224    // 設定樣式為Excel中指定單元格的樣式
225    public void setStyle(int rowNo, int column) {
226       Row row = null;
227       Cell cell = null;
228       try {
229          style= xssfWorkbook.createCellStyle();
230          style.setVerticalAlignment( VerticalAlignment.CENTER);
231          style.setAlignment(HorizontalAlignment.CENTER);
232          
233       } catch (Exception e) {
234          e.printStackTrace();
235       }
236    }
237 
238    /*
239     * 當用例執行結果失敗時,使用該方法,以紅色字體寫入excel
240     * @param   r單元格行數
241     *           l單元格列數
242     *           value輸入值
243     *           size字體大小
244     *            con是否加粗
245     *           fontStyle字體型別
246     */
247    public void writeFailCell(int rowNo, int column, String value,int size,boolean con,String fontStyle) {
248       if(fontStyle==null||"".equals(fontStyle)){
249          fontStyle="宋體";
250       }
251       Row row = null;
252       try {
253          // 獲取指定行
254          row = sheet.getRow(rowNo);
255       } catch (Exception e) {
256          e.printStackTrace();
257       }
258       // 行不存在,則創建
259       if (row == null) {
260          row = sheet.createRow(rowNo);
261       }
262       // 在該行,新建指定列的單元格
263       Cell cell = row.createCell(column);
264       // 設定單元格值
265       cell.setCellValue(value);
266       // 設定單元格樣式
267       CellStyle failStyle = null;
268       // 新建字體樣式
269       Font font = null;
270       // 根據不同的excel版本進行實體化
271       if (hssfWorkbook != null) {
272          font = hssfWorkbook.createFont();
273          failStyle = hssfWorkbook.createCellStyle();
274       } else {
275          font = xssfWorkbook.createFont();
276          failStyle = xssfWorkbook.createCellStyle();
277       }
278       failStyle.setVerticalAlignment( VerticalAlignment.CENTER);
279       failStyle.setAlignment(HorizontalAlignment.CENTER);
280       failStyle.setBorderBottom(BorderStyle.THIN); //下邊框    
281       failStyle.setBorderLeft(BorderStyle.THIN);//左邊框    
282       failStyle.setBorderTop(BorderStyle.THIN);//上邊框    
283       failStyle.setBorderRight(BorderStyle.THIN);//右邊框    
284       font.setColor(IndexedColors.BLACK.index);//字體顏色
285       font.setBold(con);
286       font.setFontName(fontStyle);
287       font.setFontHeightInPoints((short) size);
288       // 將字體顏色作為單元格樣式
289       failStyle.setFont(font);
290       // 設定對應單元格樣式
291       cell.setCellStyle(failStyle);
292       //單元格文字自適應長度
293       for (int i = 0; i < value.length(); i++) {
294          sheet.autoSizeColumn(i);
295          sheet.setColumnWidth(i,sheet.getColumnWidth(i)*18/10);
296       }
297    }
298 
299    /**
300     *
301     * @param rowNo
302     * @param column
303     * @param value
304     * @param size
305     * @param con
306     * @param fontStyle
307     * @param centerVa 垂直對齊方式
308     * @param centerHo 水平對齊方式
309     */
310    public void writeFailCell(int rowNo, int column, String value,int size,boolean con,String fontStyle,VerticalAlignment centerVa ,HorizontalAlignment centerHo) {
311       if(fontStyle==null||"".equals(fontStyle)){
312          fontStyle="宋體";
313       }
314       Row row = null;
315       try {
316          // 獲取指定行
317          row = sheet.getRow(rowNo);
318       } catch (Exception e) {
319          e.printStackTrace();
320       }
321       // 行不存在,則創建
322       if (row == null) {
323          row = sheet.createRow(rowNo);
324       }
325       // 在該行,新建指定列的單元格
326       Cell cell = row.createCell(column);
327       // 設定單元格值
328       cell.setCellValue(value);
329       // 設定單元格樣式
330       CellStyle failStyle = null;
331       // 新建字體樣式
332       Font font = null;
333       // 根據不同的excel版本進行實體化
334       if (hssfWorkbook != null) {
335          font = hssfWorkbook.createFont();
336          failStyle = hssfWorkbook.createCellStyle();
337       } else {
338          font = xssfWorkbook.createFont();
339          failStyle = xssfWorkbook.createCellStyle();
340       }
341       failStyle.setVerticalAlignment(centerVa);
342       failStyle.setAlignment(centerHo);
343       failStyle.setBorderBottom(BorderStyle.THIN); //下邊框    
344       failStyle.setBorderLeft(BorderStyle.THIN);//左邊框    
345       failStyle.setBorderTop(BorderStyle.THIN);//上邊框    
346       failStyle.setBorderRight(BorderStyle.THIN);//右邊框    
347       font.setColor(IndexedColors.BLACK.index);//字體顏色
348       font.setBold(con);
349       font.setFontName(fontStyle);
350       font.setFontHeightInPoints((short) size);
351       // 將字體顏色作為單元格樣式
352       failStyle.setFont(font);
353       // 設定對應單元格樣式
354       cell.setCellStyle(failStyle);
355       //單元格文字自適應長度
356       for (int i = 0; i < value.length(); i++) {
357          sheet.autoSizeColumn(i);
358          sheet.setColumnWidth(i,sheet.getColumnWidth(i)*18/10);
359       }
360    }
361 
362    /**
363     * 將求和公式寫入單元格中
364     * @param rowNo  公式寫入的行數
365     * @param column 公式寫入的列數
366     * @param startLine 求和開始行數
367     */
368    public void sumMation(int rowNo, int column,int startLine){
369          Row row = null;
370          try {
371             // 獲取指定行
372             row = sheet.getRow(rowNo);
373          } catch (Exception e) {
374             e.printStackTrace();
375          }
376          // 行不存在,則創建
377          if (row == null) {
378             row = sheet.createRow(rowNo);
379          }
380          // 在該行,新建指定列的單元格
381          Cell cell = row.createCell(column);
382          String ch1 = CellReference.convertNumToColString(column);  //將當前行長度轉成ABC列
383          String ch1Start=ch1+startLine;
384          String chiEnd=ch1+rowNo+"";
385          //不需要給該指定的單元格賦值,寫入上面行,匯出時自動會合計
386          String format="SUM("+ch1Start+":"+chiEnd+")";
387          cell.setCellFormula(format);
388          CellStyle failStyle = null;
389          // 新建字體樣式
390          Font font = null;
391          // 根據不同的excel版本進行實體化
392          if (hssfWorkbook != null) {
393             font = hssfWorkbook.createFont();
394             failStyle = hssfWorkbook.createCellStyle();
395          } else {
396             font = xssfWorkbook.createFont();
397             failStyle = xssfWorkbook.createCellStyle();
398          }
399          failStyle.setVerticalAlignment( VerticalAlignment.CENTER);
400          failStyle.setAlignment(HorizontalAlignment.CENTER);
401          // 設定字體顏色為紅色
402          font.setColor(IndexedColors.BLACK.index);
403          font.setBold(true);
404          failStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,#0"));
405          failStyle.setVerticalAlignment( VerticalAlignment.CENTER);
406          failStyle.setAlignment(HorizontalAlignment.CENTER);
407          failStyle.setBorderBottom(BorderStyle.THIN); //下邊框    
408          failStyle.setBorderLeft(BorderStyle.THIN);//左邊框    
409          failStyle.setBorderTop(BorderStyle.THIN);//上邊框    
410          failStyle.setBorderRight(BorderStyle.THIN);//右邊框    
411          // 將字體顏色作為單元格樣式
412          failStyle.setFont(font);
413          // 設定對應單元格樣式
414          cell.setCellStyle(failStyle);
415       }
416 
417 
418    // 寫入一整行的內容
419    public void writeLine(int rowNo, List<String> list) {
420       Row row = null;
421       try {
422          // 獲取指定行
423          row = sheet.getRow(rowNo);
424       } catch (Exception e) {
425          e.printStackTrace();
426       }
427       // 行不存在,則創建
428       if (row == null) {
429          row = sheet.createRow(rowNo);
430       }
431       Cell cell = null;
432       for (int i = 0; i < list.size(); i++) {
433          // 在該行,新建指定列的單元格
434          cell = row.createCell(i);
435          // 設定單元格值
436          cell.setCellValue(list.get(i));
437          // 設定單元格樣式
438          cell.setCellStyle(style);
439       }
440    }
441 
442    /**
443     *  單元格合并
444     * @param m 開始行
445     * @param n 結束行
446     * @param p 開始列
447     * @param q 結束列
448     */
449    public void mergeCells(int m,int n,int p,int q){
450        CellRangeAddress region = new CellRangeAddress(m, n, p, q);
451            sheet.addMergedRegion(region);
452 
453            RegionUtil.setBorderBottom(1, region, sheet); // 下邊框  
454            RegionUtil.setBorderLeft(1, region, sheet); // 左邊框  
455            RegionUtil.setBorderRight(1, region, sheet); // 有邊框  
456            RegionUtil.setBorderTop(1, region, sheet); // 上邊框</strong></span>
457       Row row = null;
458       try {
459          // 獲取指定行
460          row = sheet.getRow(m);
461       } catch (Exception e) {
462          e.printStackTrace();
463       }
464       // 行不存在,則創建
465       if (row == null) {
466          row = sheet.createRow(m);
467       }
468       // 在該行,新建指定列的單元格
469       Cell cell = row.createCell(p);
470       CellStyle failStyle = null;
471       // 新建字體樣式
472       Font font = null;
473       // 根據不同的excel版本進行實體化
474       if (hssfWorkbook != null) {
475          font = hssfWorkbook.createFont();
476          failStyle = hssfWorkbook.createCellStyle();
477       } else {
478          font = xssfWorkbook.createFont();
479          failStyle = xssfWorkbook.createCellStyle();
480       }
481       font.setBold(true);
482       failStyle.setFont(font);
483       cell.setCellStyle(failStyle);
484    }
485 
486 
487    /**
488     * //將結果表在記憶體中的作業簿內容保存到磁盤檔案中
489     */
490    public void save()
491    {
492       System.out.println("保存檔案");
493       // 如果結果表檔案未創建,則不保存
494       if (path != null) {
495          try {
496             //基于結果表路徑創建檔案輸出流
497             stream = new FileOutputStream(new File(path));
498             //將結果表的workbook作業簿的內容寫入輸出流中,即寫入檔案
499             if (xssfWorkbook != null) {
500                xssfWorkbook.write(stream);
501                xssfWorkbook.close();
502             } else {
503                if (hssfWorkbook != null) {
504                   hssfWorkbook.write(stream);
505                   hssfWorkbook.close();
506                } else {
507                   System.out.println("未打開Excel檔案!");
508                }
509             }
510             //公式重繪
511             sheet.setForceFormulaRecalculation(true);
512             //關閉輸出流,完成將記憶體中workbook寫入檔案的程序,保存檔案,
513             stream.close();
514          } catch (Exception e) {
515             e.printStackTrace();
516          }
517       }
518    }
519 
520    /**
521     *   復制指定下標的sheet
522     * @param sheetIndex 被復制sheet的下標
523     * @param sheetName 復制后sheet的名稱
524     */
525    public void  copySheet(int sheetIndex, String sheetName){
526       try {
527          //基于結果表路徑創建檔案輸出流
528 
529             //將結果表的workbook作業簿的內容寫入輸出流中,即寫入檔案
530             if (xssfWorkbook != null) {
531                sheet= xssfWorkbook.cloneSheet(sheetIndex, sheetName);
532 
533             } else {
534                if (hssfWorkbook != null) {
535                   HSSFSheet rows = hssfWorkbook.cloneSheet(sheetIndex);
536                   useSheet(rows.getSheetName());
537                   updateSheetName(sheetName);
538                } else {
539                   System.out.println("未打開Excel檔案!");
540                }
541             }
542          //公式重繪
543          sheet.setForceFormulaRecalculation(true);
544          } catch (Exception e) {
545          e.printStackTrace();
546       }
547    }
548 
549 }

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/263196.html

標籤:Java

上一篇:Memcached or Redis?

下一篇:手把手教你Spring Boot整合Mybatis Plus 代碼生成器

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more