




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java IO流詳盡解析 流的概念和作用Java流操作有關(guān)的類(lèi)或接口:學(xué)習(xí)Java IO,不得不提到的就是JavaIO流。流是一組有順序的,有起點(diǎn)和終點(diǎn)的字節(jié)集合,是對(duì)數(shù)據(jù)傳輸?shù)目偡Q(chēng)或抽象。即數(shù)據(jù)在兩設(shè)備間的傳輸稱(chēng)為流,流的本質(zhì)是數(shù)據(jù)傳輸,根據(jù)數(shù)據(jù)傳輸特性將流抽象為各種類(lèi),方便更直觀(guān)的進(jìn)行數(shù)據(jù)操作。IO流的分類(lèi)根據(jù)處理數(shù)據(jù)類(lèi)型的不同分為:字符流和字節(jié)流根據(jù)數(shù)據(jù)流向不同分為:輸入流和輸出流字符流和字節(jié)流字符流的由來(lái): 因?yàn)閿?shù)據(jù)編碼的不同,而有了對(duì)字符進(jìn)行高效操作的流對(duì)象。本質(zhì)其實(shí)就是基于字節(jié)流讀取時(shí),去查了指定的碼表。字節(jié)流和字符流的區(qū)別:(1)讀寫(xiě)單位不同:字節(jié)流以字節(jié)(
2、8bit)為單位,字符流以字符為單位,根據(jù)碼表映射字符,一次可能讀多個(gè)字節(jié)。(2)處理對(duì)象不同:字節(jié)流能處理所有類(lèi)型的數(shù)據(jù)(如圖片、avi等),而字符流只能處理字符類(lèi)型的數(shù)據(jù)。(3)字節(jié)流在操作的時(shí)候本身是不會(huì)用到緩沖區(qū)的,是文件本身的直接操作的;而字符流在操作的時(shí)候下后是會(huì)用到緩沖區(qū)的,是通過(guò)緩沖區(qū)來(lái)操作文件,我們將在下面驗(yàn)證這一點(diǎn)。結(jié)論:優(yōu)先選用字節(jié)流。首先因?yàn)橛脖P(pán)上的所有文件都是以字節(jié)的形式進(jìn)行傳輸或者保存的,包括圖片等內(nèi)容。但是字符只是在內(nèi)存中才會(huì)形成的,所以在開(kāi)發(fā)中,字節(jié)流使用廣泛。輸入流和輸出流對(duì)輸入流只能進(jìn)行讀操作,對(duì)輸出流只能進(jìn)行寫(xiě)操作,程序中需要根據(jù)待傳輸數(shù)據(jù)的不同特性而使用
3、不同的流。Java流類(lèi)圖結(jié)構(gòu):Java IO流對(duì)象1. 輸入字節(jié)流InputStream定義和結(jié)構(gòu)說(shuō)明:從輸入字節(jié)流的繼承圖可以看出:InputStream 是所有的輸入字節(jié)流的父類(lèi),它是一個(gè)抽象類(lèi)。ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三種基本的介質(zhì)流,它們分別從Byte 數(shù)組、StringBuffer、和本地文件中讀取數(shù)據(jù)。PipedInputStream 是從與其它線(xiàn)程共用的管道中讀取數(shù)據(jù),與Piped 相關(guān)的知識(shí)后續(xù)單獨(dú)介紹。ObjectInputStream 和所有FilterInputStream
4、的子類(lèi)都是裝飾流(裝飾器模式的主角)。意思是FileInputStream類(lèi)可以通過(guò)一個(gè)String路徑名創(chuàng)建一個(gè)對(duì)象,F(xiàn)ileInputStream(String name)。而DataInputStream必須裝飾一個(gè)類(lèi)才能返回一個(gè)對(duì)象,DataInputStream(InputStream in)。實(shí)例操作演示:【案例 】讀取文件內(nèi)容1. /*2. * 字節(jié)流3. * 讀文件內(nèi)容4. * */5. import java.io.*;6. class hello7. public static void main(String args) throws IOException 8. Str
5、ing fileName="D:"+File.separator+"hello.txt"9. File f=new File(fileName);10. InputStream in=new FileInputStream(f);11. byte b=new byte1024;12. in.read(b);13. in.close();14. System.out.println(new String(b);15. 16. 注意:該示例中由于b字節(jié)數(shù)組長(zhǎng)度為1024,如果文件較小,則會(huì)有大量填充空格。我們可以利用in.read(b);的返回值來(lái)設(shè)計(jì)程序,
6、如下案例:【案例】讀取文件內(nèi)容1. /*2. * 字節(jié)流3. * 讀文件內(nèi)容4. * */5. import java.io.*;6. class hello7. public static void main(String args) throws IOException 8. String fileName="D:"+File.separator+"hello.txt"9. File f=new File(fileName);10. InputStream in=new FileInputStream(f);11. byte b=new byte10
7、24;12. int len=in.read(b);13. in.close();14. System.out.println("讀入長(zhǎng)度為:"+len);15. System.out.println(new String(b,0,len);16. 17. 注意:觀(guān)察上面的例子可以看出,我們預(yù)先申請(qǐng)了一個(gè)指定大小的空間,但是有時(shí)候這個(gè)空間可能太小,有時(shí)候可能太大,我們需要準(zhǔn)確的大小,這樣節(jié)省空間,那么我們可以這樣做:【案例】讀取文件內(nèi)容1. /*2. * 字節(jié)流3. * 讀文件內(nèi)容,節(jié)省空間4. * */5. import java.io.*;6. class hello7
8、. public static void main(String args) throws IOException 8. String fileName="D:"+File.separator+"hello.txt"9. File f=new File(fileName);10. InputStream in=new FileInputStream(f);11. byte b=new byte(int)f.length();12. in.read(b);13. System.out.println("文件長(zhǎng)度為:"+f.length(
9、);14. in.close();15. System.out.println(new String(b);16. 17. 【案例】逐字節(jié)讀1. /*2. * 字節(jié)流3. * 讀文件內(nèi)容,節(jié)省空間4. * */5. import java.io.*;6. class hello7. public static void main(String args) throws IOException 8. String fileName="D:"+File.separator+"hello.txt"9. File f=new File(fileName);10.
10、 InputStream in=new FileInputStream(f);11. byte b=new byte(int)f.length();12. for (int i = 0; i < b.length; i+) 13. bi=(byte)in.read();14. 15. in.close();16. System.out.println(new String(b);17. 18. 注意:上面的幾個(gè)例子都是在知道文件的內(nèi)容多大,然后才展開(kāi)的,有時(shí)候我們不知道文件有多大,這種情況下,我們需要判斷是否獨(dú)到文件的末尾。【案例】字節(jié)流讀取文件1. /*2. * 字節(jié)流3. *讀文件4
11、. * */5. import java.io.*;6. class hello7. public static void main(String args) throws IOException 8. String fileName="D:"+File.separator+"hello.txt"9. File f=new File(fileName);10. InputStream in=new FileInputStream(f);11. byte b=new byte1024;12. int count =0;13. int temp=0;14.
12、while(temp=in.read()!=(-1)15. bcount+=(byte)temp;16. 17. in.close();18. System.out.println(new String(b);19. 20. 注意:當(dāng)讀到文件末尾的時(shí)候會(huì)返回-1.正常情況下是不會(huì)返回-1的。【案例】DataInputStream類(lèi)1. import java.io.DataInputStream;2. import java.io.File;3. import java.io.FileInputStream;4. import java.io.IOException;5. 6. public
13、class DataOutputStreamDemo7. public static void main(String args) throws IOException8. File file = new File("d:" + File.separator +"hello.txt");9. DataInputStream input = new DataInputStream(new FileInputStream(file);10. char ch = new char10;11. int count = 0;12. char temp;13. wh
14、ile(temp = input.readChar() != 'C')14. chcount+ = temp;15. 16. System.out.println(ch);17. 18. 【案例】PushBackInputStream回退流操作1. import java.io.ByteArrayInputStream;2. import java.io.IOException;3. import java.io.PushbackInputStream;4. 5. /*6. * 回退流操作7. * */8. public class PushBackInputStreamDem
15、o9. public static void main(String args) throwsIOException10. String str = "hello,rollenholt"11. PushbackInputStream push = null;12. ByteArrayInputStream bat = null;13. bat = new ByteArrayInputStream(str.getBytes();14. push = new PushbackInputStream(bat);15. int temp = 0;16. while(temp = p
16、ush.read() != -1)17. if(temp = ',')18. push.unread(temp);19. temp = push.read();20. System.out.print("(回退" +(char) temp + ") ");21. else22. System.out.print(char) temp);23. 24. 25. 26. 2. 輸出字節(jié)流OutputStream定義和結(jié)構(gòu)說(shuō)明:IO 中輸出字節(jié)流的繼承圖可見(jiàn)上圖,可以看出:OutputStream 是所有的輸出字節(jié)流的父類(lèi),它是一個(gè)抽象類(lèi)。By
17、teArrayOutputStream、FileOutputStream是兩種基本的介質(zhì)流,它們分別向Byte 數(shù)組、和本地文件中寫(xiě)入數(shù)據(jù)。PipedOutputStream 是向與其它線(xiàn)程共用的管道中寫(xiě)入數(shù)據(jù),ObjectOutputStream 和所有FilterOutputStream的子類(lèi)都是裝飾流。具體例子跟InputStream是對(duì)應(yīng)的。實(shí)例操作演示:【案例】向文件中寫(xiě)入字符串1. /*2. * 字節(jié)流3. * 向文件中寫(xiě)入字符串4. * */5. import java.io.*;6. class hello7. public static void main(String ar
18、gs) throws IOException 8. String fileName="D:"+File.separator+"hello.txt"9. File f=new File(fileName);10. OutputStream out =new FileOutputStream(f);11. String str="Hello World"12. byte b=str.getBytes();13. out.write(b);14. out.close();15. 16. 你也可以一個(gè)字節(jié)一個(gè)字節(jié)的寫(xiě)入文件:【案例】逐字節(jié)寫(xiě)入
19、文件1. /*2. * 字節(jié)流3. * 向文件中一個(gè)字節(jié)一個(gè)字節(jié)的寫(xiě)入字符串4. * */5. import java.io.*;6. class hello7. public static void main(String args) throws IOException 8. String fileName="D:"+File.separator+"hello.txt"9. File f=new File(fileName);10. OutputStream out =new FileOutputStream(f);11. String str=&q
20、uot;Hello World!"12. byte b=str.getBytes();13. for (int i = 0; i < b.length; i+) 14. out.write(bi);15. 16. out.close();17. 18. 【案例】向文件中追加新內(nèi)容1. /*2. * 字節(jié)流3. * 向文件中追加新內(nèi)容:4. * */5. import java.io.*;6. class hello7. public static void main(String args) throws IOException 8. String fileName="
21、;D:"+File.separator+"hello.txt"9. File f=new File(fileName);10. OutputStream out =new FileOutputStream(f,true);/true表示追加模式,否則為覆蓋11. String str="Rollen"12. /String str="rnRollen" 可以換行13. byte b=str.getBytes();14. for (int i = 0; i < b.length; i+) 15. out.write(bi
22、);16. 17. out.close();18. 19. 【案例】復(fù)制文件1. /*2. * 文件的復(fù)制3. * */4. import java.io.*;5. class hello6. public static void main(String args) throws IOException 7. if(args.length!=2)8. System.out.println("命令行參數(shù)輸入有誤,請(qǐng)檢查");9. System.exit(1);10. 11. File file1=new File(args0);12. File file2=new File(
23、args1);13. 14. if(!file1.exists()15. System.out.println("被復(fù)制的文件不存在");16. System.exit(1);17. 18. InputStream input=new FileInputStream(file1);19. OutputStream output=new FileOutputStream(file2);20. if(input!=null)&&(output!=null)21. int temp=0;22. while(temp=input.read()!=(-1)23. ou
24、tput.write(temp);24. 25. 26. input.close();27. output.close();28. 29. 【案例】使用內(nèi)存操作流將一個(gè)大寫(xiě)字母轉(zhuǎn)化為小寫(xiě)字母1. /*2. * 使用內(nèi)存操作流將一個(gè)大寫(xiě)字母轉(zhuǎn)化為小寫(xiě)字母3. * */4. import java.io.*;5. class hello6. public static void main(String args) throws IOException 7. String str="ROLLENHOLT"8. ByteArrayInputStream input=new Byte
25、ArrayInputStream(str.getBytes();9. ByteArrayOutputStream output=new ByteArrayOutputStream();10. int temp=0;11. while(temp=input.read()!=-1)12. char ch=(char)temp;13. output.write(Character.toLowerCase(ch);14. 15. String outStr=output.toString();16. input.close();17. output.close();18. System.out.pri
26、ntln(outStr);19. 20. 【案例】驗(yàn)證管道流:進(jìn)程間通信1. /*2. * 驗(yàn)證管道流3. * */4. import java.io.*;5. 6. /*7. * 消息發(fā)送類(lèi)8. * */9. class Send implements Runnable10. private PipedOutputStream out=null;11. public Send() 12. out=new PipedOutputStream();13. 14. public PipedOutputStream getOut()15. return this.out;16. 17. public
27、 void run()18. String message="hello , Rollen"19. try20. out.write(message.getBytes();21. catch (Exception e) 22. e.printStackTrace();23. try24. out.close();25. catch (Exception e) 26. e.printStackTrace();27. 28. 29. 30. 31. /*32. * 接受消息類(lèi)33. * */34. class Recive implements Runnable35. priv
28、ate PipedInputStream input=null;36. public Recive()37. this.input=new PipedInputStream();38. 39. public PipedInputStream getInput()40. return this.input;41. 42. public void run()43. byte b=new byte1000;44. int len=0;45. try46. len=this.input.read(b);47. catch (Exception e) 48. e.printStackTrace();49
29、. try50. input.close();51. catch (Exception e) 52. e.printStackTrace();53. 54. System.out.println("接受的內(nèi)容為 "+(new String(b,0,len);55. 56. 57. /*58. * 測(cè)試類(lèi)59. * */60. class hello61. public static void main(String args) throws IOException 62. Send send=new Send();63. Recive recive=new Recive()
30、;64. try65. /管道連接66. send.getOut().connect(recive.getInput();67. catch (Exception e) 68. e.printStackTrace();69. 70. new Thread(send).start();71. new Thread(recive).start();72. 73. 【案例】DataOutputStream類(lèi)示例1. import java.io.DataOutputStream;2. import java.io.File;3. import java.io.FileOutputStream;4.
31、import java.io.IOException;5. public class DataOutputStreamDemo6. public static void main(String args) throws IOException7. File file = new File("d:" + File.separator +"hello.txt");8. char ch = 'A', 'B', 'C' ;9. DataOutputStream out = null;10. out = new Da
32、taOutputStream(new FileOutputStream(file);11. for(char temp : ch)12. out.writeChar(temp);13. 14. out.close();15. 16. 【案例】ZipOutputStream類(lèi)先看一下ZipOutputStream類(lèi)的繼承關(guān)系java.lang.Objectjava.io.OutputStreamjava.io.FilterOutputStreamjava.util.zip.DeflaterOutputStreamjava.util.zip.ZipOutputStream1. import jav
33、a.io.File;2. import java.io.FileInputStream;3. import java.io.FileOutputStream;4. import java.io.IOException;5. import java.io.InputStream;6. import java.util.zip.ZipEntry;7. import java.util.zip.ZipOutputStream;8. 9. public class ZipOutputStreamDemo110. public static void main(String args) throws I
34、OException11. File file = new File("d:" + File.separator +"hello.txt");12. File zipFile = new File("d:" + File.separator +"hello.zip");13. InputStream input = new FileInputStream(file);14. ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(15. z
35、ipFile);16. zipOut.putNextEntry(new ZipEntry(file.getName();17. / 設(shè)置注釋18. zipOut.setComment("hello");19. int temp = 0;20. while(temp = input.read() != -1)21. zipOut.write(temp);22. 23. input.close();24. zipOut.close();25. 26. 【案例】ZipOutputStream類(lèi)壓縮多個(gè)文件1. import java.io.File;2. import java.
36、io.FileInputStream;3. import java.io.FileOutputStream;4. import java.io.IOException;5. import java.io.InputStream;6. import java.util.zip.ZipEntry;7. import java.util.zip.ZipOutputStream;8. 9. /*10. * 一次性壓縮多個(gè)文件11. * */12. public class ZipOutputStreamDemo213. public static void main(String args) thro
37、ws IOException14. / 要被壓縮的文件夾15. File file = new File("d:" + File.separator +"temp");16. File zipFile = new File("d:" + File.separator + "zipFile.zip");17. InputStream input = null;18. ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(19. zipFil
38、e);20. zipOut.setComment("hello");21. if(file.isDirectory()22. File files = file.listFiles();23. for(int i = 0; i < files.length; +i)24. input = newFileInputStream(filesi);25. zipOut.putNextEntry(newZipEntry(file.getName()26. + File.separator +filesi.getName();27. int temp = 0;28. while
39、(temp = input.read() !=-1)29. zipOut.write(temp);30. 31. input.close();32. 33. 34. zipOut.close();35. 36. 【案例】ZipFile類(lèi)展示1. import java.io.File;2. import java.io.IOException;3. import java.util.zip.ZipFile;4. 5. /*6. *ZipFile演示7. * */8. public class ZipFileDemo9. public static void main(String args)
40、throws IOException10. File file = new File("d:" + File.separator +"hello.zip");11. ZipFile zipFile = new ZipFile(file);12. System.out.println("壓縮文件的名稱(chēng)為:" + zipFile.getName();13. 14. 【案例】解壓縮文件(壓縮文件中只有一個(gè)文件的情況)1. import java.io.File;2. import java.io.FileOutputStream;3. im
41、port java.io.IOException;4. import java.io.InputStream;5. import java.io.OutputStream;6. import java.util.zip.ZipEntry;7. import java.util.zip.ZipFile;8. 9. /*10. * 解壓縮文件(壓縮文件中只有一個(gè)文件的情況)11. * */12. public class ZipFileDemo213. public static void main(String args) throws IOException14. File file = ne
42、w File("d:" + File.separator +"hello.zip");15. File outFile = new File("d:" + File.separator +"unZipFile.txt");16. ZipFile zipFile = new ZipFile(file);17. ZipEntry entry =zipFile.getEntry("hello.txt");18. InputStream input = zipFile.getInputStream(en
43、try);19. OutputStream output = new FileOutputStream(outFile);20. int temp = 0;21. while(temp = input.read() != -1)22. output.write(temp);23. 24. input.close();25. output.close();26. 27. 【案例】ZipInputStream類(lèi)解壓縮一個(gè)壓縮文件中包含多個(gè)文件的情況1. import java.io.File;2. import java.io.FileInputStream;3. import java.io.F
44、ileOutputStream;4. import java.io.IOException;5. import java.io.InputStream;6. import java.io.OutputStream;7. import java.util.zip.ZipEntry;8. import java.util.zip.ZipFile;9. import java.util.zip.ZipInputStream;10. 11. /*12. * 解壓縮一個(gè)壓縮文件中包含多個(gè)文件的情況13. * */14. public class ZipFileDemo315. public static
45、 void main(String args) throws IOException16. File file = new File("d:" +File.separator + "zipFile.zip");17. File outFile = null;18. ZipFile zipFile = new ZipFile(file);19. ZipInputStream zipInput = new ZipInputStream(new FileInputStream(file);20. ZipEntry entry = null;21. InputS
46、tream input = null;22. OutputStream output = null;23. while(entry = zipInput.getNextEntry() != null)24. System.out.println("解壓縮" + entry.getName() + "文件");25. outFile = new File("d:" + File.separator + entry.getName();26. if(!outFile.getParentFile().exists()27. outFile.
47、getParentFile().mkdir();28. 29. if(!outFile.exists()30. outFile.createNewFile();31. 32. input = zipFile.getInputStream(entry);33. output = new FileOutputStream(outFile);34. int temp = 0;35. while(temp = input.read() != -1)36. output.write(temp);37. 38. input.close();39. output.close();40. 41. 42. 3.
48、字節(jié)流的輸入與輸出的對(duì)應(yīng)圖示圖中藍(lán)色的為主要的對(duì)應(yīng)部分,紅色的部分就是不對(duì)應(yīng)部分。紫色的虛線(xiàn)部分代表這些流一般要搭配使用。從上面的圖中可以看出Java IO 中的字節(jié)流是極其對(duì)稱(chēng)的。哲學(xué)上講“存在及合理”,現(xiàn)在我們看看這些字節(jié)流中不太對(duì)稱(chēng)的幾個(gè)類(lèi)吧!4.幾個(gè)特殊的輸入流類(lèi)分析LineNumberInputStream主要完成從流中讀取數(shù)據(jù)時(shí),會(huì)得到相應(yīng)的行號(hào),至于什么時(shí)候分行、在哪里分行是由改類(lèi)主動(dòng)確定的,并不是在原始中有這樣一個(gè)行號(hào)。在輸出部分沒(méi)有對(duì)應(yīng)的部分,我們完全可以自己建立一個(gè)LineNumberOutputStream,在最初寫(xiě)入時(shí)會(huì)有一個(gè)基準(zhǔn)的行號(hào),以后每次遇到換行時(shí)會(huì)在下一行添加
49、一個(gè)行號(hào),看起來(lái)也是可以的。好像更不入流了。PushbackInputStream其功能是查看最后一個(gè)字節(jié),不滿(mǎn)意就放入緩沖區(qū)。主要用在編譯器的語(yǔ)法、詞法分析部分。輸出部分的BufferedOutputStream 幾乎實(shí)現(xiàn)相近的功能。StringBufferInputStream已經(jīng)被Deprecated,本身就不應(yīng)該出現(xiàn)在InputStream部分,主要因?yàn)镾tring 應(yīng)該屬于字符流的范圍。已經(jīng)被廢棄了,當(dāng)然輸出部分也沒(méi)有必要需要它了!還允許它存在只是為了保持版本的向下兼容而已。SequenceInputStream可以認(rèn)為是一個(gè)工具類(lèi),將兩個(gè)或者多個(gè)輸入流當(dāng)成一個(gè)輸入流依次讀取。完全可以從IO 包中去除,還完全不影響IO 包的結(jié)構(gòu),卻讓其更“純潔”純潔的Decorator 模式。【案例】將兩個(gè)文本文件合并為另外一個(gè)文本文件1. import java.io.File;2. import java.io.FileInputStream;3. import java.io.FileOutputStream;4. import java.io.IOException;5. import java.io.InputStre
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)自動(dòng)化控制技術(shù)及其應(yīng)用
- 工業(yè)自動(dòng)化技術(shù)及其實(shí)踐
- 工作中的團(tuán)隊(duì)協(xié)作能力提升
- 工業(yè)設(shè)計(jì)與產(chǎn)品外觀(guān)美學(xué)
- 工作壓力管理與員工滿(mǎn)意度提升
- 工業(yè)風(fēng)格的商業(yè)地產(chǎn)裝修設(shè)計(jì)風(fēng)格探索
- 工程招投標(biāo)與合同管理解析
- 工作流程優(yōu)化與時(shí)間利用率的提升
- 工程教育中的數(shù)據(jù)可視化教學(xué)
- 工廠(chǎng)安全風(fēng)險(xiǎn)評(píng)估與管理體系建設(shè)
- 法律職業(yè)倫理歷年試題及答案
- 保潔臺(tái)賬管理制度
- 2025年水利工程專(zhuān)業(yè)考試試卷及答案
- 2025年中考物理復(fù)習(xí)難題速遞之壓強(qiáng)與浮力綜合
- 鼓脹中醫(yī)護(hù)理
- 高中家長(zhǎng)會(huì) 高三上學(xué)期迎戰(zhàn)首考家長(zhǎng)會(huì)課件
- 四川省第二地質(zhì)大隊(duì)招聘考試真題2024
- 學(xué)習(xí)解讀公平競(jìng)爭(zhēng)審查條例實(shí)施辦法課件
- 基于物聯(lián)網(wǎng)的智能家居安全監(jiān)控系統(tǒng)建設(shè)方案
- 2024年中國(guó)農(nóng)業(yè)銀行深圳市分行招聘筆試真題
- 技能培訓(xùn)學(xué)校的部門(mén)設(shè)置與職責(zé)劃分
評(píng)論
0/150
提交評(píng)論