Java實戰項目演示代碼及流的使用

在這里插入圖片描述
project
準備牌->洗牌->發牌

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;public class PokerGameplus {static HashMap<Integer,String> hs = new HashMap<>();static ArrayList<Integer> list = new ArrayList<>();static {//準備牌//"3","4","5","6","7","8","9","10","J","Q","K","A","2"//"梅花","方片","紅桃","黑桃"String[] color = {"梅花","方片","紅桃","黑桃"};String[] number = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};//牌盒int seriaNum = 1;for (String n : number) {//依次表示每個數字for (String c : color) {//依次表示每個花色hs.put(seriaNum,c + n);list.add(seriaNum);seriaNum++;}}hs.put(seriaNum,"小王");list.add(seriaNum);seriaNum++;hs.put(seriaNum,"大王");list.add(seriaNum);}PokerGameplus(){//洗牌Collections.shuffle(list);//發牌TreeSet<Integer> lord = new TreeSet<>();TreeSet<Integer> p1 = new TreeSet<>();TreeSet<Integer> p2 = new TreeSet<>();TreeSet<Integer> p3 = new TreeSet<>();for(int i = 0;i<list.size();i++){if (i<=2){lord.add(list.get(i));continue;} else if (i%3==0) {p1.add(list.get(i));} else if (i%3==1) {p2.add(list.get(i));} else if (i%3==2) {p3.add(list.get(i));}}lookpoker("底牌",lord);lookpoker("玩家1",p1);lookpoker("玩家2",p2);lookpoker("玩家3",p3);}public void lookpoker(String name,TreeSet<Integer> ts){System.out.println(name+"的牌是:");for (int seriaNum : ts) {String poker = hs.get(seriaNum);System.out.print(poker + " ");}System.out.println();}
}
public class APP {public static void main(String[] args) {//準備牌->洗牌->發牌->看牌new PokerGameplus();}
}

stream 流的中間方法
在這里插入圖片描述
stream 流的終結方法
在這里插入圖片描述
在這里插入圖片描述
方法引用
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
this and super 只能用在非靜態方法當中
異常就是程序代碼出現問題
在這里插入圖片描述
在這里插入圖片描述
捕獲異常
在這里插入圖片描述
在這里插入圖片描述
拋出處理
在這里插入圖片描述
在這里插入圖片描述
文件File的概述和構造方法
在這里插入圖片描述
創建、刪除

在這里插入圖片描述
createnewfile此方法創建一個新的空的文件夾
創建成功,返回值為true,表示此文件沒有創建過
在這里插入圖片描述
重點一定是一個文件,如果創建路徑不含后綴名,則創建一個沒有后綴名的文件名
此代碼的格式輸入
File f1 = new File(文件路徑);
boolean b = f1.mkdir();
System.out.println(b);
false表示創建失敗,windows中路徑是唯一的,如果當前路徑已存在,則創建失敗,返回false
mkdir只能創建單極文件夾,而mkdirs可以創建多級文件夾,mkdirs也可以創建單極文件夾
刪除文件、空文件夾
delete方法(不走回收站)輸出格式
//創建刪除對象
File f1 = new File(文件路徑);
//刪除
boolean b = f1.delete();
//打印結果
System.out.println(b);
//返回true or false
細節1:如果刪除的是文件,則直接刪除,不走回收站
如果刪除的是空文件夾,則直接刪除,不走回收站
如果刪除的是有內容的文件夾、則刪除失敗

File中常見成員方法獲取并遍歷
在這里插入圖片描述
ListFiles輸出格式
//1.創建File對象
File f = new File(文件路徑);
//2.ListFiles方法
//作用:獲取當前文件路徑下的,所有內容,把所有的內容放到數組中返回
File[] files = f.ListFiles();
for(File file : files){
//file代指當前文件路徑下的每一個文件或者文件夾
System.out.println(file);
}
重點細節:
當調用者File表示的路徑不存在時,返回null
當調用者File表示的路徑是文件時,返回null
當調用者File表示的路徑是一個空文件夾時,返回一個長度為0的數組
當調用者File表示的路徑是一個有內容的文件夾時,將里面所有文件和路徑放在File數組中返回
當調用者File表示的路徑是一個有隱藏文件的文件夾時,將里面所有文件和文件夾放在File數組中返回,包含隱藏文件
當調用者File表示的路徑是需要權限才能訪問的文件夾時,返回null
在這里插入圖片描述
ListRoots()方法 獲取系統中的所有盤符
輸出格式
File[] arr = File.listRoots();
System.out.println(Arrays.to.String(arr));
偶爾會用ListRoots方法
list()方法 獲取當前路徑下的所有內容(僅僅能獲取名字)
list方法輸出格式
File f1 = new File(文件路徑);
String[] arr2 = f1.list();
for(String s : arr2){
System.out.println(s);
}
list(FilenameFilter fliter) 利用文件名過濾器獲取當前路徑下所有內容
accept方法的形參,依次表示aaa文件夾里面每一個文件或者文件夾的路徑
//參數1:父級路徑
//參數2: 子級路徑
//返回值:如果返回值為false,就表示當前路徑舍棄不要
如果返回值為true,就表示當前路徑保留

list(FilenameFilter fliter)輸出格式
File f1 = new File(文件路徑);
File f2 = new File(過濾文件或存留文件的文件路徑);
String[] arr3 = f2. list(new FilenameFilter){
@Overriade
public boolean accept(File dir,String name){
return false; // 過濾此文件,不保留
//return true;//保留此文件,保留下來
}
}
});
System.out.println(Arrays.toString(arr3));
listfiles方法為主要掌握方法,主要作為文件名過濾器的方法
dir表示父級路徑
name表示子級路徑
IO流
IO流表示存儲和讀取數據的解決方案
存檔,保存到文件當中,加載數據
File表示系統中的文件或文件夾的路徑
input讀
IO流的分類
在這里插入圖片描述
純文本文件用windows記事本可以自動打開的文件
并且能讀的懂的文件
word非純文本文件

在這里插入圖片描述
字節輸出流FileOutputStream
實現需求:寫一段文字到本地文件當中(暫時不寫中文)
實現步驟:
創建對象
寫出數據
釋放資源
//1.創建對象
//寫出 輸出流 OutputStream
//本地文件 File
FileOutputStream fos = new FileOutputStream(“name指定文件路徑”);
必須要alt+enter實現throw做拋出處理
//2.寫出數據
fos.write(sth);
//3.釋放資源
fos.close();
必須要alt+enter實現throw做拋出處理
字節輸出流對象
細節1:參數是字符串或者是File對象都是可以的
細節2:如果文件不存在會創建一個新的文件,但是要保證父級路徑是存在的
細節3:如果文件存在,則會創建清空文件
寫數據
write方法的參數是整數,但是實際上寫到本地文件中是整數在ASCII上對應的字符
釋放資源
每次使用完成都必須釋放資源
個人理解為PPT or WORD 使用完之后必須關閉釋放棧內存
FileOutputStream寫數據的3種方式
在這里插入圖片描述
void write(int b) 一次字節數據
void write(byte[] b)一次寫一個字節數組
//創建對象
FileOutputStream fos = new FileOutputStream(本地文件路徑);
//寫出數據
byte[] bytes = {12,37,32,10,80};
fos.write(bytes);
//釋放資源
fos.close();
void
void write(byte[] b, int off,int len)一次寫一個字節數組的部分數據
此方法有三個參數
參數1:數組
參數2:起始索引
參數3:個數
//創建對象
FileOutputStream fos = new FileOutputStream(本地文件路徑);
//寫出數據
byte[] bytes = {12,37,32,10,80};
fos.write(bytes,off:1,len:2);
//寫入的數據為 37 32
換行寫
//創建對象
//創建對象
FileOutputStream fos = new FileOutputStream(本地文件路徑);
//寫出數據
String str = “abc”;
byte[] bytes1= str.getbytes();
fos.write(bytes1);

      String wrap = "/r/n";byte[] bytes2 = wrap.getbytes();fos.write(bytes2);String arr = "666";byte[] bytes3 = arr.getbytes();fos.write(bytes3);//釋放資源fos.close();**ctrl+alt+V自動補充前面的開頭代碼/r/n換行寫****續寫**FileOutputStream fos = new FileOutputStream(本地文件路徑,true);//true表示打開續寫開關

在這里插入圖片描述
在這里插入圖片描述
//創建對象
FileInputStream fis = new FileInputStream();
//讀取數據
int b1 = fis.read();
System.out.println(b1);
//釋放資源
fis.close();
強轉可以用char
創建輸入流對象:
細節:如果文件不存在,就直接報錯
寫數據:
細節:一次讀一個字節的數據是在ASCII上所對應的數據
如果讀到文件末尾了,read方法返回-1

釋放資源:每次·1使用完流之后必須把資源釋放掉
FileInputStream的循環讀取
字節輸入流中的循環讀取
//創建對象
FileInputStream fis = new FileInputStream();
//循環讀取
int b;
while( (b = fis.read()) != -1){
System.out.println(char(b))//print可以打印成一行,println打印一個換一行
}
//釋放資源
fis.close();
read方法讀取一次移動一次指針
文件拷貝
FileInputStream fis = new FileInputStream();
FileOutputStream fos = new FileOutputStream(本地文件路徑);
int b;
while( (b = fis.read()) != -1){
fos.write(b);
}
//釋放資源
//規則:先開的流后關閉
fos.close();
fis.close();

FileInputStream的讀取問題
FileInputStream一次只能讀取一個字節
弊端:一次只讀了一個字節public int read(byte[] buffer)
一次讀取多個字節
演示代碼
//創建對象
FileInputStream fis = new FileInputStream(文件路徑name:);
//讀取數據
byte[] bytes = new byte[2];
int len = fis.read(bytes);
String str = new String(bytes);
System.out.println(str);
//釋放資源
fis.close();
把數據c用e覆蓋后,打印ed,接下來無法讀出數據,所以打印ed數據
加上0和len,加上覆蓋范圍
多線程&JUC
線程是操作系統能夠進行運算調度的最小單位,它被包含在進程當中
單線程程序,從上往下運行
多線程程序,提高運行效率
在這里插入圖片描述

并發和并行
并發:在同一時刻,有多個指令在單個CPU上交替執行
并行:在同一時刻,有多個指令在單個CPU上同時執行
并發和并行可能在同時存在
多線程的實現方式
多線程的第一種啟動方式繼承Thread
My Thread
public void run() {
//書寫線程需要的代碼

}
public static void main(String[] args){
//多線程的第一種啟動方式
//1.自己定義一個類繼承Thread
//2.重寫run方法
//3.創建子類對象,并啟動線程
MyThread t1 = new MyTread();
t1.start();
}
start()方法才是用來開啟多線程的正確調用
如果加上t2并書名getName就可以實現交替運行
多線程的第二種實現方式
pubic class MyThread2{
public static void main(String[] args){
/*
多線程的第二種實現方式
1.自己定義一個類實現Runable接口
2.重寫里面的run方法
3.創建自己的類的對象
4.創建一個Thread類,并開啟線程
/
//創建Myrun對象
//表示多線程的執行任務
Myrun mr = new Myrun();
//創建線程對象
MyThread2 T1 = new MyThread(mr);
//開啟線程
T1.start();
//給線程設置Name
T1.setName(“線程1”);
}
}
public class Myrun implements Runable{
@override
public void run() {
//書寫線程所需要的代碼

}
}
注意Thread.currentThread()表示當前線程
多線程的第三種實現方式
pubic class MyThread3{
public static void main(String[] args){
/

多線程的第三種實現方式
特點:獲取多線程的運行結Callable接口
2.重寫call(是有返回值的,表示多線程運行的結果)
3.創建MyCallable的對象(表示多線程要執行的任務)
4.創建FutureTask的對象(管理多線程的運行結果)
5.創建Thread類的對象,并啟動(表示線程)

**/
MyCallable mc = new MyCallable();
FutureTask ft = new FutureTask(mc);
Thread t1 = new Thread(ft);
t1.start();
Integer result = ft.get();
System.out.println(result);

}}
public class MyCallable implements Callable{
@override
public Integer call() throws Exception{
//開啟線程
多線程所要執行的代碼
return null
}
}
Thread常見的成員方法
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96524.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96524.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96524.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用 OpenLayers + 高德瓦片源實現旅游足跡地圖

作為一個熱愛旅行的開發者&#xff0c;我一直想要一個能夠記錄和展示自己旅游足跡的功能。市面上雖然有很多地圖應用&#xff0c;但大多功能復雜&#xff0c;而我只需要一個簡單直觀的方式來標記去過的地方和想去的地方。 于是我決定在自己的個人網站上實現一個旅游足跡地圖功…

Redis基礎(含常用命令等以快速入門)

一、初步認識 1、NoSQL SQL 關系型數據庫&#xff08;表結構&#xff0c;強一致&#xff09;NoSQL 非關系型數據庫&#xff08;靈活結構&#xff0c;最終一致&#xff0c;水平擴展爽&#xff09; 維度SQL&#xff08;關系型&#xff09;NoSQL&#xff08;非關系型&#xf…

OSPF特殊區域、路由匯總及其他特性

OSPF路由器需要同時維護域內路由、域間路由、外部路由信息數據庫。當網絡規模不斷擴大時&#xff0c;LSDB規模也不斷增長。如果某區域不需要為其他區域提供流量中轉服務&#xff0c;那么該區域內的路由器就沒有必要維護本區域外的鏈路狀態數據庫。OSPF通過劃分區域可以減少網絡…

在緩存Cacheable注解中Key值如何使用常量

1.在常量類中定義商品緩存空間和商品緩存KEY public interface CacheConstants {/*** Goods Cache Name*/String QNA_GOODS_CACHE "qna-goods";/*** Goods Cache key*/String QNA_GOODS_CACHE_KEY "qna_goods:";/*** Order Cache Name*/String QNA_ORDER…

sklearn聚類

在此將sklearn官網的一張關于聚類算法比較的圖片放過來。 下面的表格是根據sklearn官網翻譯而來。 方法名稱 參數 可擴展性 應用場景 幾何度量(距離) MiniBatchKMeans 簇的數量 非常適合處理大量樣本和中等數量的簇(使用MiniBatch時) 通用型,適用于簇大小均勻、幾何形狀平…

Recharts:React圖表庫,組件化設計助力高效數據可視化開發

你寫前端項目時有沒有卡過數據可視化的坑&#xff1f;比如要做個用戶增長折線圖&#xff0c;查了半天原生 JS 教程&#xff0c;寫了幾十行代碼&#xff0c;結果要么坐標軸對不上&#xff0c;要么數據渲染不出來&#xff1b;或者用了某個圖表庫&#xff0c;文檔全是英文&#xf…

Java 中String類的常用方法

Java 中的 String 類提供了豐富的方法用于字符串操作&#xff0c;以下是最常用的一些方法分類總結&#xff1a; 一、獲取字符串信息length()&#xff1a;返回字符串長度&#xff08;字符個數&#xff09; String s "hello"; int len s.length(); // len 5charAt(i…

【記錄】Docker|Docker內部訪問LInux主機上的Ollama服務

部分內容參考自&#xff1a;使得 docker 容器內部可以訪問宿主機的 ollama 服務_docker 訪問 ollama-CSDN 博客&#xff0c;補充添加了更多的細節&#xff0c;也補充了一個更加簡單的方案。 我測試的系統版本&#xff1a;Ubuntu 24.04.2 LTS noble&#xff0c;查看方式是指令 l…

數據庫物理外鍵與邏輯外鍵全解析

一、核心概念 1. 物理外鍵 (Physical Foreign Key) 物理外鍵是數據庫層面通過語法明確創建的外鍵約束。它是由數據庫管理系統&#xff08;DBMS&#xff09;本身&#xff08;如 MySQL, PostgreSQL, Oracle&#xff09;來強制實現的。 它是什么&#xff1a;數據庫表結構的一部分&…

Vue3入門到實戰,最新版vue3+TypeScript前端開發教程,創建Vue3工程,筆記03

筆記03 一、創建Vue3項目 1.1、創建方式 使用vue-cli創建使用vite創建&#xff08;推薦&#xff09;Vue3官網創建項目文檔 兩種創建方式&#xff0c;推薦使用第二種。vue-cli是基于webpack實現的&#xff0c;vite是新一代前端構建工具。 2.1、vue3項目結構

企業如何利用群暉 NAS 構建高效數據備份與容災體系

在數字化轉型的過程中&#xff0c;企業數據已成為核心資產。然而&#xff0c;勒索病毒攻擊、硬件故障、操作失誤以及自然災害等風險&#xff0c;都可能導致數據丟失甚至業務中斷。如何構建一個高效、安全、可恢復的數據備份與容災體系&#xff0c;已成為企業 IT 管理的關鍵課題…

關于在pycharm終端連接服務器

1、先為每個項目創建一個虛擬環境2、使用命令下載torchpip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple安裝之后發現安裝在了本地&#xff0c;我需要安裝到服務器里面&#xff0c;此時可以把本地的刪除&#xff0c;因為是默認安裝到c盤&#xff0c;除非你指定路…

CSS 繼承 (Inheritance)

一、核心概念CSS 繼承是指某些 CSS 屬性如果被設置在父元素上&#xff0c;其值會自動流向&#xff08;應用到&#xff09;其所有后代元素&#xff08;子、孫元素等&#xff09;的特性。核心價值&#xff1a;通過將樣式聲明應用于祖先元素&#xff0c;可以避免在所有后代元素上重…

UGUI源碼剖析(15):Slider的運行時邏輯與編輯器實現

UGUI源碼剖析&#xff08;第十五章&#xff09;&#xff1a;Slider的運行時邏輯與編輯器實現 在之前的章節中&#xff0c;我們已經深入了UGUI眾多核心組件的運行時源碼。然而&#xff0c;一個完整的Unity組件&#xff0c;通常由兩部分構成&#xff1a;定義其在游戲世界中行為的…

【Python】爬蟲html提取內容基礎,bs4

前言 BeautifulSoup也就是bs4,里面功能其實有很多&#xff0c;不過對于爬蟲而言主要掌握一下幾塊就可以了 怎么找標簽&#xff1f;找到標簽后怎么獲取屬性&#xff0c;怎么獲取文本內容如何通過找到的標簽繼續獲取子標簽 安裝 pip install bs4案例 對于找標簽來說&#xf…

組件庫打包工具選型(npm/pnpm/yarn)的區別和技術考量

組件庫打包工具選型&#xff1a;npm/pnpm/yarn的區別與技術考量 一、核心差異概述 組件庫打包工具的選擇&#xff0c;本質是在??依賴管理效率??、??磁盤空間占用??、??Monorepo支持??、??安裝速度??及??幽靈依賴風險??之間做權衡。npm作為Node.js默認工具…

新型APT組織“嘈雜熊“針對哈薩克斯坦能源部門發起網絡間諜活動

感染鏈圖示 | 圖片來源&#xff1a;Seqrite實驗室APT研究團隊 Seqrite實驗室APT研究團隊近日發布了一份深度分析報告&#xff0c;披露了一個自2025年4月起活躍的新型威脅組織"嘈雜熊"(Noisy Bear)。該組織主要針對哈薩克斯坦石油天然氣行業&#xff0c;攻擊手法結合…

OpenCV 圖像直方圖

目錄 一、什么是圖像直方圖&#xff1f; 關鍵概念&#xff1a;BINS&#xff08;區間&#xff09; 二、直方圖的核心作用 三、OpenCV 計算直方圖&#xff1a;calcHist 函數詳解 1. 函數語法與參數解析 2. 基礎實戰&#xff1a;計算灰度圖直方圖 代碼實現 結果分析 3. 進…

Firefox Window 開發流程(四)

1 引言 在進行 Firefox 瀏覽器的二次開發、內核研究或自定義構建之前&#xff0c;最重要的步驟就是拉取源碼并進入 Mozilla 官方提供的開發引導模式。這不僅是所有定制工作的起點&#xff0c;同時也決定了后續開發環境的穩定性與可維護性。本文將從源碼獲取、工具使用、引導腳…

mybatis plus 使用wrapper輸出SQL

在MyBatis-Plus中&#xff0c;Wrapper對象用于構建復雜的查詢條件。雖然MyBatis-Plus本身沒有直接提供從Wrapper對象獲取完整SQL語句的方法&#xff0c;但你可以通過一些間接的方式來獲取生成的SQL片段。以下是如何使用MyBatis-Plus的Wrapper來獲取SQL片段的步驟&#xff1a;?…