电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java IO流學習總結之文件傳輸基礎

瀏覽:8日期:2022-08-14 09:33:24
一、Java IO流總覽

Java IO流學習總結之文件傳輸基礎

二、File類2.1 常用API

package pkg1;import java.io.File;import java.io.IOException;/** * @author Administrator * @date 2021/4/2 */public class FileDemo { public static void main(String[] args) {// 了解構造函數,可查看APIFile file = new File('d:javaiocook');// 設置分隔符,不同系統也可以認識//File file=new File('d:'+File.separator);//System.out.println(file.exists());if (!file.exists()) { file.mkdirs();} else { file.delete();}// 是否是一個目錄,如果是目錄返回true,如果不是目錄或目錄不存在返回falseSystem.out.println(file.isDirectory());// 如果是一個文件System.out.println(file.isFile());//File file2 = new File('d:javaio日記1.txt');File file2 = new File('d:javaio', '日記1.txt');if (!file2.exists()) { try {file2.createNewFile(); } catch (IOException e) {e.printStackTrace(); }} else { file2.delete();}// 常用File對象的apiSystem.out.println(file);// file.toString()的內容System.out.println(file.getAbsolutePath());System.out.println(file.getName());System.out.println(file2.getName());System.out.println(file.getParent());System.out.println(file2.getParent());System.out.println(file.getParentFile().getAbsolutePath()); }}

測試結果:

Java IO流學習總結之文件傳輸基礎

其他API:

package pkg1;import java.io.*;import java.util.RandomAccess;/** * @author Administrator * @date 2021/4/7 */class FileDemo2 { public static void main(String[] args) {File file = new File('d:javaioexample');if (!file.exists()) { file.mkdir();}/*String[] fileNames = file.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) {System.out.println('文件是:'+dir + '' + name);return name.endsWith('java'); }});for (String fileName : fileNames != null ? fileNames : new String[0]) { System.out.println(fileName);}*//*File[] files = file.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) {System.out.println('文件是:' + dir + '' + name);return false; }});for (File fileName : files) { System.out.println(fileName.toString());}*/File[] files = file.listFiles(new FileFilter() { @Override public boolean accept(File pathname) {System.out.println(pathname);return false; }});for (File fileName : files) { System.out.println(fileName.toString());} }}

測試:

Java IO流學習總結之文件傳輸基礎

2.2 遍歷目錄

package pkg2;import java.io.File;/** * 列出File的一些常用操作,如過濾、遍歷 */public class FileUtils { /** * 列出指定目錄(包括其子目錄)下的所有文件 */ public static void listDirectory(File dir) throws IllegalAccessException {if (!dir.exists()) { throw new IllegalArgumentException('目錄:' + dir + '不存在');}if (!dir.isDirectory()) { throw new IllegalArgumentException(dir + '不存在');}// list()用于列出當前目錄下的子目錄(不包含子目錄下的內容)和文件。返回的是字符串數組。/*String[] fileNames = dir.list();for (String string : fileNames) { System.out.println(dir + '' + string);}*/// 若要遍歷子目錄下的內容,就要構造成File對象進行遞歸操作。File提供了直接返回File對象的APIFile[] files = dir.listFiles();//返回直接子目錄(文件)的抽象/*for (File file : files) { System.out.println(file);}*/if (files != null && files.length > 0) { for (File file : files) {if (file.isDirectory()) { // 遞歸 listDirectory(file);} else { System.out.println(file);} }} }}

測試類:

package pkg2;import java.io.File;public class FileUtilsTest { public static void main(String[] args) throws IllegalAccessException {FileUtils.listDirectory(new File('d:javaio')); }}

測試結果:

Java IO流學習總結之文件傳輸基礎

三、RandomAccessFile類

package pkg3;import java.io.*;import java.util.Arrays;public class RafDemo { public static void main(String[] args) throws IOException {// 若沒有指定路徑,則表示相對路徑,即項目所在路徑。File demo = new File('demo');if (!demo.exists()) { demo.mkdir();}File file = new File(demo, 'raf.dat');if (!file.exists()) { file.createNewFile();}RandomAccessFile raf = new RandomAccessFile(file, 'rw');// 查看指針位置System.out.println(raf.getFilePointer());// 0raf.writeInt(’A’);// 只寫了一個字節System.out.println(raf.getFilePointer());raf.writeInt(’B’);int i = 0x7fffffff;// 用write方法每次只能寫一個字節,如果要把i寫進去就要寫4次raf.writeInt(i >>> 24);//高8位raf.writeInt(i >>> 16);raf.writeInt(i >>> 8);raf.writeInt(i);// 低8位System.out.println(raf.getFilePointer());// 直接寫一個int ,與上述4步操作等效raf.writeInt(i);String s = '中';byte[] gbk = s.getBytes('gbk');raf.write(gbk);System.out.println('raf長度:' + raf.length());// 讀文件,必須把指針移到頭部raf.seek(0);// 一次性讀取,把文件中的內容都讀到字節數組匯總byte[] buf = new byte[(int) raf.length()];raf.read(buf);System.out.println(Arrays.toString(buf));// 轉為字符串/*String s1=new String(buf,'utf-8');System.out.println(s1);*/for (byte b : buf) { System.out.print(Integer.toHexString(b & 0xff) + ' ');}raf.close(); }}

測試結果:

Java IO流學習總結之文件傳輸基礎

四、字節流4.1 FileInputStream

package pkg4;import java.io.*;public class IOUtil { /** * 讀取指定文件內容, 按照十六進制輸出到控制臺, * 且每輸出10個byte換行 * * @param fileName */ public static void printHex(String fileName) throws IOException {// 把文件作為字節流進行操作FileInputStream fis = new FileInputStream(fileName);int b;int i = 1;while ((b = fis.read()) != -1) { if (b <= 0xf) {// 單位數前補0System.out.print('0'); } // 將整型b轉換為16進制表示的字符串 System.out.print(Integer.toHexString(b) + ' '); if (i++ % 10 == 0) {System.out.println(); }}fis.close(); } public static void printHexByByteArray(String fileName) throws IOException {FileInputStream fis = new FileInputStream(fileName);/*byte[] buf = new byte[20 * 1024];//從fis中批量讀取字節,放入到buf字節數組中,從第0個位置開始放,最多放buf.length個,返回的是讀到的字節個數int bytes = fis.read(buf, 0, buf.length);// 一次性讀完,說明字節數組足夠大int j = 1;for (int i = 0; i < bytes; i++) { if (buf[i] <= 0xf) {System.out.print('0'); } System.out.println(Integer.toHexString(buf[i]) + ' '); if (j++ % 10 == 0) {System.out.println(); }}*/// 當字節數組容量不夠,一次讀不完時byte[] buf = new byte[8 * 1024];int bytes = 0;int j = 1;while ((bytes = fis.read(buf, 0, buf.length)) != -1) { for (int i = 0; i < bytes; i++) {// byte是8位,int類型是32位,為了避免數據轉換錯誤,通過&0xff將高24位清零System.out.print(Integer.toHexString(buf[i] & 0xff) + ' ');if (j++ % 10 == 0) { System.out.println();} }}fis.close(); } /** * 文件拷貝操作 -> 字節批量讀取式拷貝,效率最優 */ public static void copyFile(File srcFile, File destFile) throws IOException {if (!srcFile.exists()) { throw new IllegalArgumentException('文件:' + srcFile + '不存在');}if (!srcFile.isFile()) { throw new IllegalArgumentException(srcFile + '不是文件');}FileInputStream fis = new FileInputStream(srcFile);FileOutputStream fos = new FileOutputStream(destFile);byte[] buf = new byte[8 * 1024];int b;while ((b = fis.read(buf, 0, buf.length)) != -1) { fos.write(buf, 0, b); fos.flush();//最好加上這個}fis.close();fos.close(); } /** * 用帶緩沖的字節流,進行文件拷貝,效率居中 */ public static void copyFileByBuffer(File srcFile, File destFile) throws IOException {if (!srcFile.exists()) { throw new IllegalArgumentException('文件:' + srcFile + '不存在');}if (!srcFile.isFile()) { throw new IllegalArgumentException(srcFile + '不是文件');}BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));int c;while ((c = bis.read()) != -1) { bos.write(c); // 刷新緩沖區。不能省略,否則無法寫入 bos.flush();}bis.close();bos.close(); } /** * 文件拷貝操作 -> 單字節,不帶緩沖式拷貝,效率最差 */ public static void copyFileByByte(File srcFile, File destFile) throws IOException {if (!srcFile.exists()) { throw new IllegalArgumentException('文件:' + srcFile + '不存在');}if (!srcFile.isFile()) { throw new IllegalArgumentException(srcFile + '不是文件');}FileInputStream fis = new FileInputStream(srcFile);FileOutputStream fos = new FileOutputStream(destFile);int b;while ((b = fis.read()) != -1) { fos.write(b); fos.flush();}fis.close();fos.close(); }}

測試類:

package pkg4;import java.io.IOException;public class IOUtilTest1 { public static void main(String[] args) {try { IOUtil.printHex('d:javaioFileUtils.java');} catch (IOException e) { e.printStackTrace();} }}4.2 FileOutputStream

package pkg5;import pkg4.IOUtil;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class FileOutDemo { public static void main(String[] args) throws IOException {// 如果該文件不存在,則直接創建,如果存在,則刪除后創建。若要在后面追加內容,參數中加一個trueFileOutputStream fos = new FileOutputStream('demo/out.dat');// 寫入A的低8位fos.write(’A’);fos.write(’B’);// write只能寫8位,那么寫一個int需要4次,每次8位int a = 10;fos.write(a >>> 24);fos.write(a >>> 16);fos.write(a >>> 8);fos.write(a);byte[] gbk = '中國'.getBytes('gbk');fos.write(gbk);fos.close();IOUtil.printHex('demo/out.dat'); }}

測試類:

package pkg5;import pkg4.IOUtil;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.IOException;public class IOUtilTest3 { public static void main(String[] args) {try { IOUtil.copyFile(new File('d:javaioabc.txt'), new File('d:javaioabc1.txt'));} catch (IOException e) { e.printStackTrace();} }}4.3 DataInputStream 、DataOutputStream

輸入流:

package pkg6;import pkg4.IOUtil;import java.io.DataInputStream;import java.io.FileInputStream;import java.io.IOException;public class DisDemo { public static void main(String[] args) throws IOException {String file = 'demo/dos.dat';IOUtil.printHex(file);DataInputStream dis = new DataInputStream(new FileInputStream(file));int i = dis.readInt();System.out.println(i);i = dis.readInt();System.out.println(i);long l = dis.readLong();System.out.println(l);double d = dis.readDouble();System.out.println(d);String s = dis.readUTF();System.out.println(s);dis.close(); }}

輸出流:

package pkg6;import pkg4.IOUtil;import java.io.DataOutputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class DosDemo { public static void main(String[] args) throws IOException {String file = 'demo/dos.dat';DataOutputStream dos = new DataOutputStream(new FileOutputStream(file));dos.writeInt(10);dos.writeInt(-10);dos.writeLong(10l);dos.writeDouble(10.5);// 采用utf-8寫入dos.writeUTF('中國');// 采用utf-16be寫入dos.writeChars('中國');dos.close();IOUtil.printHex(file); }}4.4 字節緩沖流

工具類在4.1小節的IOUtil.java中。

測試類:

package pkg7;import pkg4.IOUtil;import java.io.File;import java.io.IOException;public class IOUtilTest4 { public static void main(String[] args) {// 效率最高try { long start = System.currentTimeMillis(); IOUtil.copyFile(new File('d:javaioAlpha.mp3'), new File('d:javaioAlpha1.mp3')); long end = System.currentTimeMillis(); System.out.println('耗時1:' + (end - start));} catch (IOException e) { e.printStackTrace();}// 效率居中try { long start = System.currentTimeMillis(); IOUtil.copyFileByBuffer(new File('d:javaioAlpha.mp3'), new File('d:javaioAlpha2.mp3')); long end = System.currentTimeMillis(); System.out.println('耗時2:' + (end - start));} catch (IOException e) { e.printStackTrace();}// 效率最差try { long start = System.currentTimeMillis(); IOUtil.copyFileByByte(new File('d:javaioAlpha.mp3'), new File('d:javaioAlpha3.mp3')); long end = System.currentTimeMillis(); System.out.println('耗時3:' + (end - start));} catch (IOException e) { e.printStackTrace();} }}五、字符流5.1 InputStreamReader、OutputStreamWriter

package pkg8;import java.io.*;public class IsrAndOswDemo { public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream('d:javaioaa.txt');InputStreamReader isr = new InputStreamReader(fis);//未指定編碼格式,即按照項目默認編碼操作FileOutputStream fos = new FileOutputStream('d:javaioaa.txt');OutputStreamWriter osw = new OutputStreamWriter(fos);//未指定編碼格式,即按照項目默認編碼操作/*int c;while ((c=isr.read())!=-1){ System.out.print((char)c);}*//*批量讀取。放入buffer這個字節數組,從第0個位置開始放,最多放buffer.length個,返回讀到的字符個數。 */char[] buffer = new char[8 * 1024];int c;while ((c = isr.read(buffer, 0, buffer.length)) != -1) { String s = new String(buffer, 0, c); System.out.print(s); /*osw.write(buffer,0,c); osw.flush();*/}isr.close();osw.close(); }}5.2 FileReader、FileWriter

package pkg8;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class FrAndFwDemo { /** * 注意:FileReader、FileWriter不能指定編碼方式 */ public static void main(String[] args) throws IOException {FileReader fr = new FileReader('d:javaioaa.txt');// 指定參數,也可以追加內容:FileWriter(String fileName, boolean append)FileWriter fw = new FileWriter('d:javaiobb.txt');char[] buffer = new char[8 * 1024];int c;while ((c = fr.read(buffer, 0, buffer.length)) != -1) { fw.write(buffer, 0, c); fw.flush();}fr.close();fw.close(); }}5.3 BufferedReader、BufferedWriter、PrintWriter

package pkg9;import java.io.*;public class BrAndBwOrPwDemo { public static void main(String[] args) throws IOException {// 對文件進行讀寫操作BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream('d:javaioaa.txt')));//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream('d:javaiocc.txt')));// PrintWriter可以替換BufferedWriterPrintWriter pw = new PrintWriter('d:javaiocc.txt');String line;while ((line = br.readLine()) != null) { // 一次讀一行,不能識別換行 System.out.println(line); /*bw.write(line); // 手動給出換行 bw.newLine(); bw.flush();*/ pw.println(line); pw.flush();}br.close();//bw.close();pw.close(); }}六、對象的序列化、反序列化6.1 transient關鍵字、序列化、反序列化

實體類:

package pkg10;import java.io.Serializable;public class Student implements Serializable { private String stuNo; private String stuName; // 該元素不會 進行JVM默認的序列化,但可以手動序列化 private transient int stuAge; public Student(String stuNo, String stuName, int stuAge) {this.stuNo = stuNo;this.stuName = stuName;this.stuAge = stuAge; } public String getStuNo() {return stuNo; } public void setStuNo(String stuNo) {this.stuNo = stuNo; } public String getStuName() {return stuName; } public void setStuName(String stuName) {this.stuName = stuName; } public int getStuAge() {return stuAge; } public void setStuAge(int stuAge) {this.stuAge = stuAge; } @Override public String toString() {return 'Student{' +'stuNo=’' + stuNo + ’’’ +', stuName=’' + stuName + ’’’ +', stuAge=' + stuAge +’}’; } /** * 序列化 */ private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException {// 把JVM能默認序列化的元素進行序列化操作s.defaultWriteObject();// 手動完成stuAge的序列化s.writeInt(stuAge); } /** * 反序列化 */ private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException {// 把JVM默認能反序列化的元素進行反序列化操作s.defaultReadObject();// 手動完成stuAge的反序列化stuAge = s.readInt(); }}

測試類:

package pkg10;import java.io.*;import java.util.ArrayList;public class ObjectSeriaDemo { public static void main(String[] args) throws IOException, ClassNotFoundException {String file = 'demo/obj.dat';// 1、對象的序列化/*ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));Student student = new Student('10001', '張三', 20);oos.writeObject(student);oos.flush();oos.close();*/// 2、對象的反序列化ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));Student stu = (Student) ois.readObject();System.out.println(stu);ois.close(); }}6.2 序列化、反序列化時,子類、父類構造方法的調用

package pkg11;import java.io.*;import java.sql.SQLOutput;public class ObjectSeriaDemo { public static void main(String[] args) throws IOException, ClassNotFoundException {// 序列化/*ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream('demo/obj1.dat'));Foo2 foo2=new Foo2();oos.writeObject(foo2);oos.flush();oos.close();*/// 反序列化/*ObjectInputStream ois=new ObjectInputStream(new FileInputStream('demo/obj1.dat'));Foo2 foo2= (Foo2) ois.readObject();System.out.println(foo2);ois.close();*//*ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream('demo/obj1.dat'));Bar2 bar2=new Bar2();oos.writeObject(bar2);oos.flush();oos.close();*//*ObjectInputStream ois = new ObjectInputStream(new FileInputStream('demo/obj1.dat'));Bar2 bar2 = (Bar2) ois.readObject();System.out.println(bar2);ois.close();*//*ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream('demo/obj1.dat'));Ccc2 ccc2=new Ccc2();oos.writeObject(ccc2);oos.flush();oos.close();*/ObjectInputStream ois = new ObjectInputStream(new FileInputStream('demo/obj1.dat'));Ccc2 ccc2 = (Ccc2) ois.readObject();System.out.println(ccc2);ois.close(); }}/** * 一個類實現了序列化接口,其子類都可以實現序列化。 */class Foo implements Serializable { public Foo() {System.out.println('foo...'); }}class Foo1 extends Foo { public Foo1() {System.out.println('foo1...'); }}class Foo2 extends Foo1 { public Foo2() {System.out.println('foo2...'); }}/** * 對子類對象進行反序列化操作時, * 如果其父類沒有實現序列化接口 * 那么其父類的構造函數會被調用 */class Bar { public Bar() {System.out.println('Bar...'); }}class Bar1 extends Bar implements Serializable { public Bar1() {System.out.println('Bar1...'); }}class Bar2 extends Bar1 { public Bar2() {System.out.println('Bar2...'); }}class Ccc { public Ccc() {System.out.println('Ccc...'); }}class Ccc1 extends Ccc { public Ccc1() {System.out.println('Ccc1...'); }}class Ccc2 extends Ccc1 implements Serializable { public Ccc2() {System.out.println('Ccc2...'); }}

Foo2類反序列化時不打印構造方法:

Java IO流學習總結之文件傳輸基礎

Bar2類反序列化時打印了Bar的構造方法:

Java IO流學習總結之文件傳輸基礎

Ccc2類反序列化時打印了Ccc、Ccc1的構造方法:

Java IO流學習總結之文件傳輸基礎

結論(詳見導圖標紅部分):

對子類對象進行反序列化操作時,如果其父類沒有實現序列化接口,那么其父類的構造函數會被調用。

到此這篇關于Java IO流學習總結之文件傳輸基礎的文章就介紹到這了,更多相關Java IO流文件傳輸內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 纳米二氧化硅,白炭黑,阴离子乳化剂-臻丽拾科技| 月嫂_保姆_育婴_催乳_母婴护理_产后康复_养老护理-吉祥到家家政 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 杭州顺源过滤机械有限公司官网-压滤机_板框压滤机_厢式隔膜压滤机厂家 | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 京港视通报道-质量走进大江南北-京港视通传媒[北京]有限公司 | 大巴租车平台承接包车,通勤班车,巴士租赁业务 - 鸿鸣巴士 | 成都办公室装修-办公室设计-写字楼装修设计-厂房装修-四川和信建筑装饰工程有限公司 | 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | ★济南领跃标识制作公司★济南标识制作,标牌制作,山东标识制作,济南标牌厂 | 常州翔天实验仪器厂-恒温振荡器-台式恒温振荡器-微量血液离心机 恒温恒湿箱(药品/保健品/食品/半导体/细菌)-兰贝石(北京)科技有限公司 | 护栏打桩机-打桩机厂家-恒新重工 | 超声骨密度仪-骨密度检测仪-经颅多普勒-tcd仪_南京科进实业有限公司 | 山东成考网-山东成人高考网| ET3000双钳形接地电阻测试仪_ZSR10A直流_SXJS-IV智能_SX-9000全自动油介质损耗测试仪-上海康登 | 【MBA备考网】-2024年工商管理硕士MBA院校/报考条件/培训/考试科目/提前面试/考试/学费-MBA备考网 | 上海深蓝_缠绕机_缠膜机-上海深蓝机械装备有限公司 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 烟气在线监测系统_烟气在线监测仪_扬尘检测仪_空气质量监测站「山东风途物联网」 | 无锡网站建设-做网站-建网站-网页设计制作-阿凡达建站公司 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | 刮板输送机,粉尘加湿搅拌机,螺旋输送机,布袋除尘器 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | 小港信息港-鹤壁信息港 鹤壁老百姓便民生活信息网站 | 成都APP开发-成都App定制-成都app开发公司-【未来久】 | 「阿尔法设计官网」工业设计_产品设计_产品外观设计 深圳工业设计公司 | 镀锌方管,无缝方管,伸缩套管,方矩管_山东重鑫致胜金属制品有限公司 | 手板_手板模型制作_cnc手板加工厂-东莞天泓 | 金属波纹补偿器厂家_不锈钢膨胀节价格_非金属伸缩节定制-庆达补偿器 | 无刷电机_直流无刷电机_行星减速机-佛山市藤尺机电设备有限公司 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 长沙一级消防工程公司_智能化弱电_机电安装_亮化工程专业施工承包_湖南公共安全工程有限公司 | 济南网站策划设计_自适应网站制作_H5企业网站搭建_济南外贸网站制作公司_锐尚 | 成都竞价托管_抖音代运营_网站建设_成都SEM外包-成都智网创联网络科技有限公司 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 客服外包专业服务商_客服外包中心_网萌科技 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 | 保温杯,儿童婴童奶瓶,运动水壶「广告礼品杯定制厂家」超朗保温杯壶 | 超细|超微气流粉碎机|气流磨|气流分级机|粉体改性机|磨粉机|粉碎设备-山东埃尔派粉体科技 | 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 |