Java文件IO操作基础

news2024/11/14 3:36:46

目录

前言

java.io.File

        1. 构造方法

        2. 方法

                get类方法

                文件的创建和删除

                目录的创建与删除

输入输出流

        InputStream

        FileInputStream 概述

                代码实例1

                 代码实例2

                 字符集问题?

        Scanner 读取

        OutputStream

Java输入输出流的使用案例


创作不易, 多多支持😶‍🌫️😘😘


前言

        本次内容主要针对java当中的文件读写操作, 文件读写的基本操作包括File对象, InputString, OutputString.及其构造方法, 用法, 使用场景等讲解

java.io.File

         对于一个文件, 我们如要使用Java语言对其进行操作,  那么java标准库里面提供了一个File类, 用来描述一个文件,  此处的File类的实例对象就是对应的硬盘上一个文件的抽象, 这个抽象具体指的就是, 文件是存储来硬盘上的, 如果直接用代码操作硬盘是不方便的, 于是就在内存中创建一个与此文件与之对应的文件对象, 便于清楚这个对象的位置, 然后修改这个文件.

        1. 构造方法

File类构造方法
方法定义 说明
File(File parent, String child)parent为父目录(一个File实例), 然后加上一个孩子路径, 构成一个新的File实例
File(String pathName)根绝文件路径创建出一个新的File实例, 这个路径可以是绝对路径或者是相对路径
File(String parent, String child)使用父目录加子目录的形式,创建一个新的File实例.

我们创建一个文件夹, 在c盘下的文件夹, 然后在文件夹里面创建这个test.txt文本文件, 如图:

 

  •  File(String pathName)
import java.io.File;

public class Main {
    public static void main(String[] args) {
        File file1 = new File("c:/test/test.txt");
        boolean ret = file1.exists();
        System.out.println(ret);
    }
}

输出: true( 此处的exists()方法是检查这个文件是否存在, 如果不存在返回false)

  • File(String parent, String child)

import java.io.File;

public class Main {
    public static void main(String[] args) {
        File file2 = new File("C:\\c\\code_c","cProject");
        boolean ret = file2.exists();
        System.out.println(ret);
    }
}

输出:true; 

  • File(File parent, String child)

import java.io.File;

public class Main {
    public static void main(String[] args) {
        File file1 = new File("C:\\c\\code_c");
        File file2 = new File(file1,"cProject");
        boolean ret = file2.exists();
        System.out.println(ret);
    }
}

输出:true;

        2. 方法

File类中的方法概览
返回类型方法定义说明
String
getParent()返回 File 对象的父目录文件路径
StringgetName()返回 FIle 对象的纯文件名称
StringgetPath()
返回 File 对象的文件路径
StringgetAbsolutePath()返回 File 对象的绝对路径
StringgetCanonicalPath()返回 File 对象的修饰过的绝对路径
boolean exists()判断 File 对象描述的文件/ 目录是否真实存在
boolean isDirectory()判断 File 对象代表的文件是否是一个目录
booleanisFile()判断 File 对象代表的文件是否是一个普通文件
boolean createNewFile()根据 File 对象,自动创建一个空文件。成功创建后返回 true
booleandelete()根据 File 对象,删除该文件。成功删除后返回 true
voiddeleteOnExit()根据 File 对象,标注文件将被删除,删除动作会到JVM 运行结束时才会进行
String[ ]list()返回 File 对象代表的目录下的所有文件名
File[ ]listFiles()返回 File 对象代表的目录下的所有文件,以 File 对象表示
boolean mkdir()
创建 File 对象代表的目录
boolean mkdirs()创建 File 对象代表的目录,如果必要,会创建中间目录
boolean
renameTo(File dest)
进行文件改名,也可以视为我们平时的剪切、粘贴操 作
boolean canRead()判断用户是否对文件有可读权限
boolean canWrite()判断用户是否对文件有可写权限
 对于一个文件:

以下方法的实例都是用上面这个文件(cProject.sln)来表示, 其基准目录为C:/c/code_c/cProject

                get类方法

import java.io.File;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("C:/c/code_c/cProject/cProject.sln");
        String retGetParent = file.getParent();
        String retGetName = file.getName();
        String retGetPath = file.getPath();
        String retGetAbsolutePath = file.getAbsolutePath();
        String retGetCanonicalPath = file.getCanonicalPath();
        System.out.println("文件:C:/c/code_c/cProject/cProject.sln");
        System.out.println("父目录文件路径:"+retGetParent);
        System.out.println("文件名称:"+retGetName);
        System.out.println("文件路径:"+retGetPath);
        System.out.println("文件绝对路径:"+retGetAbsolutePath);
        System.out.println("修饰过的绝对路径"+retGetCanonicalPath);
    }
}

                文件的创建和删除

基于目录C:/test

(1)判断这个文件test.txt是否存在

import java.io.File;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("C:/test/test.txt");
        System.out.println(file.exists());
    }
}

输出true;

(2) 判断test.txt是否为一个目录 / 判断test是否为一个目录

import java.io.File;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        File file1 = new File("C:/test");
        File file2 = new File("C:/test/test.txt");
        System.out.println(file1.isDirectory());
        System.out.println(file2.isDirectory());

    }
}

输出:

说明C:/test/test.txt是一个文件C:/test是一个目录

(3) 在C:/test目录下没有cc空文件, 随后创建一个空目录cc

import java.io.File;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        File file1 = new File("C:/test/cc");
        boolean ret = file1.createNewFile();
        System.out.println(ret);
    }
}

输出true, 然后查看test目录:

cc正确的被创建, 并返回true.

 (3) 创建了cc空文件之后, 删除这个cc空文件

import java.io.File;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        File file1 = new File("C:/test/cc");
        boolean ret = file1.delete();
        System.out.println(ret);
    }
}

输出true, 查看test目录, 发现cc空文件已经被删除

                目录的创建与删除

(1)在C:/test目录下创建目录cam

import java.io.File;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        File file1 = new File("C:/test/cam");
        boolean ret = file1.mkdir();
        System.out.println(ret);
    }
}

输出:true,

 成功在Test目录下创建cam子目录

(2)在test目录中的cam目录中创建多级子目录./a/b/c

import java.io.File;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        File file1 = new File("C:/test/cam/a/b/c");
        boolean ret = file1.mkdirs();
        System.out.println(ret);
    }
}

输出true:

 (3) 返回Test目录下所有的文件名(除了test外, 额外添加几个文件a,b,c)

import java.io.File;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        File file1 = new File("C:/Test");
        String[] retArr = file1.list();
        for(String x :retArr) {
            System.out.println(x);
        }
    }
}

输出:

通过这个我们可以发现, cam是目录, 而其他的abc和test的文本都是文件, 目录cam也被输出

(4) 将C;/Test/test.txt文件进行改名

public class Main {
    public static void main(String[] args) throws IOException {
        File file1 = new File("C:/Test/test.txt");
        File file2 = new File("C:/Test/cam/test.txt");
       boolean ret = file1.renameTo(file2);
        System.out.println(ret);
    }
}

输出true;

 Test目录中的test.txt文件被改名(绝对路径)到了Test目录中的cam目录中去了.

输入输出流

        输入输出流是针对文件的内容的一种操作, 针对文本文件, 提供了一组类, 统称为字符流, 针对二进制文本文件, 提供了一组类, 统称为字节流, 字符流的基本单位为字符, 字节流的基本单位为字节.

        每一个流对象, 都具有两个方向, 一个是读, 一个是写, 分别对应的Reader和InputString , Writer, outputString.

        我们所说的输入输出都是针对CPU来操作的, 为了方便大家理解. 对于一组数据, 由外存或者硬盘等io设备进入CPU, 成为input, 反之, 从CPU中输出数据到主存或者是其他io设备就称为output.

        下面使用的代码案例中. 其中的try with resource操作是自动执行close关闭操作的. 例如:

 

        InputStream

方法和说明

InputStream方法概述
返回类型方法签名说明
intread()返回一个字节的数据, 如果返回值为-1, 则代表读到文件末尾
intread(byte[] bytes)最多读取bytes.length字节的数据到bytes中,返回值为读到的字节数, -1 代表读取到文件莫问
intread(byte[] bytes, int offset, int len)最多读取到len - offset字节的数据到bytes中, 放在从offset开始, 返回值为实际读取到的字节数, -1 代表读取完了
voidclose()关闭字节流

InputStream只是一个抽象类, 不能创建出InputStream实例来对文件进行操作, 还需要使用具体的实现类,  关于InputStream的实现类有很多, 接下来我们重点介绍他的一个实现类 FileInputStream.

        FileInputStream 概述

        FileInputStream有两个构造方法, 一个是FileInputStream(File file), 另一个是FileInputStream(String name), 第一个是传入一个File类实例, 第二个是直接传入一个文件路径, 构成一个字节输入流

                代码实例1

存在文件C:/Test/cam/test.txt

public class IOStream {
    public static void main(String[] args) throws IOException {
        try(InputStream inputStream = new FileInputStream("C:/Test/cam/test.txt")) {
            while (true) {
                int readb = inputStream.read();
                if (readb == -1) {
                    // 代表文件已经读取完成
                    break;
                }
                System.out.printf("%c",readb);
            }
        }
    }
}

 

                 代码实例2

此处的文件案例:C:/Test/cam/test.txt

    public static void main(String[] args) throws IOException {
        try(InputStream inputStream = new FileInputStream("C:/Test/cam/test.txt")) {
            byte[] bytes = new byte[2];
            int len;
            while (true) {
                len = inputStream.read(bytes);
                if (len == -1) {
                    break;
                }
                for (int i = 0; i < len; i++) {
                    System.out.printf("%c", bytes[i]);
                }
            }
        }
    }

                 字符集问题?

        如果我们把下面的字符, 改成中文字符,  然后再使用InputStream的FileInputStream实现类来读取.

 

 此处就会抛出异常, 显示IllegalFormatCodePointException

此处需要使用utf8编码来解决.

 public static void main(String[] args) throws IOException {
        try (InputStream is = new FileInputStream("hello.txt")) {
            byte[] buf = new byte[1024];
            int len;
            while (true) {
                len = is.read(buf);
                if (len == -1) {
                    // 代表文件已经全部读完
                    break;
               }
                // 每次使用 3 字节进行 utf-8 解码,得到中文字符
                // 利用 String 中的构造方法完成
                // 这个方法了解下即可,不是通用的解决办法
                for (int i = 0; i < len; i += 3) {
                    String s = new String(buf, i, 3, "UTF-8");
                    System.out.printf("%s", s);
               }
           }
       }
   }

此处的String有一个构造方法

 

        Scanner 读取

 从FileInputStream实现类的实例中可以看到, 我们直接对这种字符读取的话是有很多限制的, 比如字符集就是多种限制的其中之一, 他直接影响到了我们数据的读取.

        为么避免这种比较麻烦的读取, 我们可以直接使用Scanner的读取方式, 我们常见的Scanner(System.in)的读取方法之外, 还有一个Scanner(InputStream is, String characterSet)

InputStream is 为输入流, characterSet为指定搞得字符集.

        使用实例

还是使用上面的C:/Test/cam/test.txt文件模块, test.txt中写有你好中国:

public static void main(String[] args) throws IOException{
        try(InputStream inputStream = new FileInputStream("C:/Test/cam/test.txt")) {
            try(Scanner scanner = new Scanner(inputStream, "UTF-8")) {
                while (scanner.hasNext()) {
                    String s = scanner.next();
                    System.out.println(s);
                }
            }
        }
    }

        OutputStream

OutputStream同样是一个抽象类, 是对比输入流InputStream的, 相对应的, OutputStream也有其对应方法, 其类型为写入, 如下:

返回类型方法说明
voidwrite(int b)b为要写入的字节数据
voidwrite(byte[] bArr)写入字符数组bArr
intwrite(byte[] b, int offset, int len)从b中写入字符数组, 从offset开始, 长度为len
voidclose()关闭字节流
void flush()
重要:我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 为 了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的 一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写 入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的 数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,调用 flush (刷新)操作,将数据刷到设备中。

OutputStream只是一个抽象类, 想要真正的对文件进行输出操作, 就需要一个实现类, 也就是FileOutputStream, 接下来看实例

还是以上面C:/Test/a.txt

使用实例1

    public static void main(String[] args) throws IOException{
        try(OutputStream outputStream = new FileOutputStream("C:/Test/a.txt")) {
            outputStream.write('h');
            outputStream.write('e');
            outputStream.write('l');
            outputStream.write('l');
            outputStream.write('o');
            outputStream.close();
        }
    }

在这个a.txt的空的文本文件中写入hello, 我们打开这个文件如下:

 使用完之后记得使用close来关闭输入输出流

使用实例2

    public static void main(String[] args) throws IOException{
        try(OutputStream outputStream = new FileOutputStream("C:/Test/a.txt")) {
            byte[] barr = new byte[] {(byte)'h', (byte)'e',(byte)'l',(byte)'l',(byte)'o'};
            outputStream.write(barr);
        }
    }

 我们往已经存在数据"hello" 的文件a.txt中, 写入了单词"world", 最后的结果为world, 所以这个write为覆盖写模式.

使用实例3

往文件a.txt中写入iLoveYou中的iLve

public static void main(String[] args) throws IOException{
        try(OutputStream outputStream = new FileOutputStream("C:/Test/a.txt")) {
            byte[] bytes = new byte[] {(byte)'i', (byte)'L',(byte)'o',(byte)'v',(byte)'e',(byte)'Y',(byte)'o',(byte)'u',};
            outputStream.write(bytes,0,5);
        }
    }

使用实例4

        如果我们输入的是字符串, 而不是byte[] 数组, 或者是单个字符, 那么就需要将字符串转化为byte数组, 使用String类的getBytes()方法, 如下:

    public static void main(String[] args) throws IOException{
        try(OutputStream outputStream = new FileOutputStream("C:/Test/a.txt")) {
            String a = "hello world";
            byte[] bytes = a.getBytes();
            outputStream.write(bytes);
        }
    }

 如果这里输入的是中文字符, 需要在getBytes()方法中传入字符串"UTF-8", 但是如果编译器默认的字符集为UTF-8,则可以忽略不计:

 

Java输入输出流的使用案例

        我们可以设计一个, 遍历目录, 来查找文件, 找出文件中包含内容为"hello"的文件绝对路径

import java.io.*;
import java.util.Scanner;

public class IODemo1 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入您想要扫描的目录");

        File file = new File(in.next());

        // 如果file不是目录, 则表示输入的目录有误
        if (!file.isDirectory()) {
            System.out.println("您输入的为非法目录");
        }
        System.out.println("请输入您要查找的内容");

        String search = in.next();

        searchDir(file, search);
    }

    public static void searchDir(File file, String word) {
        // 1. 列出当前目录下的目录集合
        File[] files = file.listFiles();
        if (files == null) {
            // 空目录, 里面啥也没有
            return;
        }
        // 遍历里面的每一个元素, 如果是文件, 就读取, 如果是目录就继续递归
        for(File x : files) {
            System.out.println("当前搜索到" + x.getAbsolutePath());
            if (x.isDirectory()) {
                searchDir(file,word);
            } else if (x.isFile()) {
                String content = readFile(x);
                if (content.contains(word)) {
                    System.out.println(x.getAbsolutePath() + " 包含您想要的内容");
                }
            }
        }
    }

    public static String readFile(File x) throws IOException {
        StringBuilder stringBuilder = new StringBuilder();

        try (InputStream inputStream = new FileInputStream(x)) {
            while (true) {
                int b = inputStream.read();
                if (b == -1) {
                    break;
                }
                stringBuilder.append((char)b);
            }
        }
        return stringBuilder.toString();
    }
}

本节完

😶‍🌫️

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/464762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++的异常

文章目录 1. C语言传统的处理错误的方式2. C异常概念3. 异常的使用3.1 异常的抛出和匹配原则 4. C标准库的异常体系5. 自定义异常体系6. 异常的重新抛出7. 函数调用链中异常栈展开匹配原则8. 异常安全9. 异常规范10. 异常的优缺点 1. C语言传统的处理错误的方式 传统的错误处理…

Windows下版本控制器(SVN)-TortoiseSVN使用+权限配置+合并深度介绍+分支介绍

文章目录 基础知识-Windows下版本控制器(SVN)3.4 TortoiseSVN使用3.4.1 SVN检出(SVN Checkout)3.4.2 SVN更新(SVN Update)3.4.3 **SVN**提交(SVN Commit)3.4.4 **SVN**还原(SVN Revert)3.4.5 解决文件冲突3.4.6 授权访问3.4.7 显示日志(Show log)3.4.8 版本库浏览(Repo-browser…

中国社会科学院大学与美国杜兰大学金融管理硕士项目——找寻属于你的那道光

人生的路很长&#xff0c;再不舍过去&#xff0c;也要朝前走。总有一束光在闪耀&#xff0c;总有路在前方。让我们去找寻属于自己的光。这道光或明或暗&#xff0c;或远或近。给自己一个希望&#xff0c;它就是那一束光会撒在你身上&#xff0c;未来会一片灿烂。社科院与杜兰大…

什么是3D渲染,3D渲染在CG项目中为何如此重要?

随着科技的发展&#xff0c;现如今任何人都可以使用免费软件在个人计算机上创作 3D 图像&#xff0c;当然也有人对于专业 3D 艺术的创作方式及其相关工作流程存在一些误解&#xff0c;认为创建一个模型后&#xff0c;在上面放上材料和纹理&#xff0c;就可以立马得到一个漂亮的…

软件测试职业发展方向有哪些

随着人工智能时代的到来&#xff0c;IT行业受到了越来越多人的重视。软件测试作为把控软件质量必不可少的环节&#xff0c;其重要性可见一斑。 据第三方平台统计&#xff0c;北京软件测试工程师的平均薪资为16.2K&#xff0c;除了一线城市外&#xff0c;随着互联网行业逐渐下沉…

虹科新品 | 用于医疗应用的压力和气体流量传感器

ES Systems在创新MEMS方面拥有丰富的经验&#xff0c;设计了高质量和高性能的气体流量和压力传感器&#xff0c;由于其技术规格&#xff0c;出色的可靠性和有竞争力的价格&#xff0c;这些传感器在竞争产品中具有独特的品质。 Part.01 应用背景 众所周知&#xff0c;在医疗领域…

软件测试技术(五)软件测试流程

软件测试流程 软件测试流程如下&#xff1a; 测试计划测试设计测试执行 单元测试集成测试确认测试系统测试验收测试回归测试验证活动 测试计划 测试计划由测试负责人来编写&#xff0c;用于确定各个测试阶段的目标和策略。这个过程将输出测试计划&#xff0c;明确要完成的测…

freeswitch的任务引擎问题与解决方案

概述 freeswitch核心框架中有一个定时任务系统task&#xff0c;在开发过程中用来做一些延时操作和异步操作很方便。 我们在VOIP的呼叫流程中&#xff0c;经常会有一些对实时性要求没那么高的操作&#xff0c;或者会有阻塞流程的操作&#xff0c;我们都可以开启一个定时任务子…

【 Spring 事务 】

文章目录 一、为什么需要事务(简单回顾)二、MySQL 中的事务使⽤三、Spring 中事务的实现3.1 Spring 编程式事务(手动事务)3.2 Spring 声明式事务(自动事务)3.2.1 Transactional 作⽤范围3.2.2 Transactional 参数说明3.2.3 Transactional 不进行事务回滚的情况3.2.4 Transactio…

Android 使用Retrofit+协程实现超简单大文件下载并回显进度条

安卓自带的进度条弹窗过时了&#xff0c;这里简单创建一个进度条弹窗 在drawable文件夹创建progress_dialog_bg_style.xml一个圆角白色背景样式 <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com…

IPTV系统架构的分析与研究

1 引言   IPTV业务是伴随着宽带互联网的飞速发展而兴起的一项新兴的互联网增值业务,它利用宽带互联网的基础设施&#xff0c;以家用电视机和电脑作为主要终端 &#xff0c;利用网络机顶盒(STB,Set -TopBox) &#xff0c;通过互联网协议来传送电视信号.提供包括 电视节 目在 内…

嵌入式51单片机05-中断与定时器系列

文章目录 中断与定时器一、中断系统与定时器1. 中断简单介绍2. 定时器简单介绍 二、中断系列代码1. 中断操作&#xff08;中断控制LED灯亮灭&#xff09;&#xff08;1&#xff09;仿真电路图&#xff08;2&#xff09;源代码&#xff08;3&#xff09;实验结果 2. 中断操作&am…

c++强制类型转换:

强制类型转换&#xff1a;1. const属性用const_cast。 案例&#xff1a; 说明&#xff1a;该变量可以将变量的const 的属性去掉。如该案例&#xff0c;转换后修改x的值是合法的。2. 基本类型转换用static_cast。 案例&#xff1a; 说明&#xff1a;一般用在(1)基本类型&#xf…

新黑马头条项目经验(黑马)

swagger (1)简介 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(API Documentation & Design Tools for Teams | Swagger)。 它的主要作用是&#xff1a; 使得前后端分离开发更加方便&#xff0c;有利于团队协作 接…

微服务知识

Spring Cloud Netfix&#xff1a;Eureka&#xff0c;Ribbon&#xff0c;Feign&#xff0c;Hystrix&#xff0c;Zuul | Gateway&#xff0c;Config Spring Colud Alibaba&#xff1a;Nacos&#xff0c;Sentinel&#xff0c;Seata Nacos通过Ribbon实现负载均衡&#xff0c;Ribb…

【java笔记】java多线程

目录 一、概念 1.1 什么是进程&#xff1f; 1.2 什么是线程&#xff1f; 1.3 什么事多线程&#xff1f; 1.4 进程和线程的关系 二、线程对象的生命周期 三、实现线程有两种方式 3.1 继承 java.lang.Thread&#xff0c;重写 run方法 3.2 实现 java.lang.Runnable 接口…

材料写作素材:关于“大”排比句40例

1.一轮思想政治“大督查”&#xff0c;一轮政策落实“大检查”&#xff0c;一次非公企业“大走访”&#xff0c;一次问题线索“大起底”&#xff0c;一批典型案例“大曝光”。 2.在重大风险挑战面前豁得出去、顶得上去&#xff0c;在重大困难考验面前迎难而上、敢于胜利&#…

【计网】WebSocket协议

目录 一、背景 二、WebSocket握手过程 三、SpringBoot中使用WebSocket协议 1、服务器 2、客户端 一、背景 一般的web开发以请求响应为主即客户端发送一个请求&#xff0c;服务器返回一个响应&#xff0c;这就使得类似聊天等需求基于HTTP协议进行实现时比较消费资源&#xf…

大数据之Hadoop分布式文件系统HDFS

目录&#xff1a; 一、介绍二、HDFS 设计原理三、原理图形介绍四、HDFS 常用 shell 命令五、HDFS相关JavaAPI 一、介绍 HDFS &#xff08;Hadoop Distributed File System&#xff09;是 Hadoop 下的分布式文件系统&#xff0c;具有高容错、高吞吐量等特性&#xff0c;可以部署…

厨电新十年,不可逆的行业分化与老板电器的数字进化

“人生就像滚雪球&#xff0c;最重要之事是发现湿雪和长长的山坡。”股神巴菲特的这句名言&#xff0c;让坡是否长、雪是否厚成为人们评价一个行业、一家公司的标准之一。 家电行业&#xff0c;厨电曾是最后一块“坡长雪厚”之地&#xff0c;投资者也对相关企业给出了相当的热…