javaIO流之文件流

news2024/11/20 0:44:43

目录

  • 简介
  • 一、File的构造方法
  • 二、File的常用方法
    • 1、获取功能的方法
    • 2、绝对路径和相对路径
    • 3、判断功能的方法
    • 4、创建、删除功能的方法
    • 5、目录的遍历
    • 6、递归遍历
  • 三、RandomAccessFile
    • 1、主要方法
  • 四、Apache FileUtils 类
    • 1、复制文件或目录:
    • 2、删除文件或目录:
    • 3、移动文件或目录:
    • 4、查询文件或目录的信息:
  • 五、Hutool FileUtil 类
    • 1、copyFile:复制文件。该方法可以将指定的源文件复制到指定的目标文件中。
    • 2、move:移动文件或目录。该方法可以将指定的源文件或目录移动到指定的目标文件或目录中。
    • 3、del:删除文件或目录。该方法可以删除指定的文件或目录,如果指定的文件或目录不存在,则会抛出异常。
    • 4、rename:重命名文件或目录。该方法可以将指定的文件或目录重命名为指定的新名称。
    • 5、readLines:从文件中读取每一行数据。

简介

在 IO 操作中,文件的操作相对来说是比较复杂的,但也是使用频率最高的部分,我们几乎所有的项目中几乎都躺着一个叫做 FileUtil 或者 FileUtils 的工具类。

java.io.File 类是专门对文件进行操作的类,注意只能对文件本身进行操作,不能对文件内容进行操作,想要操作内容,必须借助输入输出流。

File 类是文件和目录的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

怎么理解上面两句话?其实很简单!

第一句是说 File 跟流无关,File 类不能对文件进行读和写,也就是输入和输出!

第二句是说 File 可以表示D:\文件目录1与D:\文件目录1\文件.txt,前者是文件夹(Directory,或者叫目录)后者是文件(file),File 类就是用来操作它俩的。

一、File的构造方法

在 Java 中,一切皆是对象,File 类也不例外,不论是哪个对象都应该从该对象的构造说起,所以我们来分析分析File类的构造方法。

比较常用的构造方法有三个:

  • File(String pathname) :通过给定的路径来创建新的 File 实例。

  • File(String parent, String child) :从父路径(字符串)和子路径创建新的 File 实例。

  • File(File parent, String child) :从父路径(File)和子路径名字符串创建新的 File 实例。

看文字描述不够生动、不够形象、不得劲?没事,通过举例马上就生动形象了,代码如下:

// 文件路径名
String path = "/Users/username/123.txt";
File file1 = new File(path);
// 文件路径名
String path2 = "/Users/username/1/2.txt";
File file2 = new File(path2); -------------相当于/Users/username/1/2.txt
// 通过父路径和子路径字符串
String parent = "/Users/username/aaa";
String child = "bbb.txt";
File file3 = new File(parent, child); --------相当于/Users/username/aaa/bbb.txt
// 通过父级File对象和子路径字符串
File parentDir = new File("/Users/username/aaa");
String child = "bbb.txt";
File file4 = new File(parentDir, child); --------相当于/Users/username/aaa/bbb.txt

注意,macOS 路径使用正斜杠(/)作为路径分隔符,而 Windows 路径使用反斜杠(\)作为路径分隔符。所以在遇到路径分隔符的时候,不要直接去写/或者\。

Java 中提供了一个跨平台的方法来获取路径分隔符,即使用 File.separator,这个属性会根据操作系统自动返回正确的路径分隔符。

File 类的注意点:

  • 一个 File 对象代表硬盘中实际存在的一个文件或者目录。
  • File 类的构造方法不会检验这个文件或目录是否真实存在。
    因此无论该路径下是否存在文件或者目录,都不影响 File 对象的创建。

二、File的常用方法

File 的常用方法主要分为获取功能、获取绝对路径和相对路径、判断功能、创建删除功能的方法。

1、获取功能的方法

  • getAbsolutePath() :返回此 File 的绝对路径。

  • getPath() :结果和 getAbsolutePath 一致。

  • getName() :返回文件名或目录名。

  • length() :返回文件长度,以字节为单位。

测试代码如下【注意测试以你自己的电脑文件夹为准】:

File f = new File("/Users/username/aaa/bbb.java");
System.out.println("文件绝对路径:"+f.getAbsolutePath());
System.out.println("文件构造路径:"+f.getPath());
System.out.println("文件名称:"+f.getName());
System.out.println("文件长度:"+f.length()+"字节");

File f2 = new File("/Users/username/aaa");
System.out.println("目录绝对路径:"+f2.getAbsolutePath());
System.out.println("目录构造路径:"+f2.getPath());
System.out.println("目录名称:"+f2.getName());
System.out.println("目录长度:"+f2.length());

注意:length() 表示文件的长度,File 对象表示目录的时候,返回值并无意义。

2、绝对路径和相对路径

绝对路径是从文件系统的根目录开始的完整路径,它描述了一个文件或目录在文件系统中的确切位置。在 Windows 系统中,绝对路径通常以盘符(如 C:)开始,例如 “C:\Program Files\Java\jdk1.8.0_291\bin\java.exe”。在 macOS 和 Linux 系统中,绝对路径通常以斜杠(/)开始,例如 “/usr/local/bin/python3”。

相对路径是相对于当前工作目录的路径,它描述了一个文件或目录与当前工作目录之间的位置关系。在 Java 中,相对路径通常是相对于当前 Java 程序所在的目录,例如 “config/config.properties”。如果当前工作目录是 “/Users/username/project”,那么相对路径 “config/config.properties” 就表示 “/Users/username/project/config/config.properties”。

注意:

  • 在 Windows 操作系统中,文件系统默认是不区分大小写的,即在文件系统中,文件名和路径的大小写可以混合使用。例如,“C:\Users\username\Documents\example.txt” 和 “C:\Users\Username\Documents\Example.txt” 表示的是同一个文件。但是,Windows 操作系统提供了一个区分大小写的选项,可以在格式化磁盘时选择启用,这样文件系统就会区分大小写。
  • 在 macOS 和 Linux 等 Unix 系统中,文件系统默认是区分大小写的。例如,在 macOS 系统中,“/Users/username/Documents/example.txt” 和 “/Users/username/Documents/Example.txt” 表示的是两个不同的文件。
// 绝对路径示例
File absoluteFile = new File("/Users/username/example/test.txt");
System.out.println("绝对路径:" + absoluteFile.getAbsolutePath());

// 相对路径示例
File relativeFile = new File("example/test.txt");
System.out.println("相对路径:" + relativeFile.getPath());

3、判断功能的方法

  • exists() :判断文件或目录是否存在。

  • isDirectory() :判断是否为目录。

  • isFile() :判断是否为文件。

方法演示,代码如下:

File file = new File("/Users/username/example");

// 判断文件或目录是否存在
if (file.exists()) {
    System.out.println("文件或目录存在");
} else {
    System.out.println("文件或目录不存在");
}

// 判断是否是目录
if (file.isDirectory()) {
    System.out.println("是目录");
} else {
    System.out.println("不是目录");
}

// 判断是否是文件
if (file.isFile()) {
    System.out.println("是文件");
} else {
    System.out.println("不是文件");
}

4、创建、删除功能的方法

  • createNewFile() :文件不存在,创建一个新的空文件并返回true,文件存在,不创建文件并返回false。
  • delete() :删除文件或目录。如果是目录,只有目录为空才能删除。
  • mkdir() :只能创建一级目录,如果父目录不存在,则创建失败。返回 true 表示创建成功,返回 false 表示创建失败。
  • mkdirs() :可以创建多级目录,如果父目录不存在,则会一并创建。返回 true 表示创建成功,返回 false 表示创建失败或目录已经存在。

开发中一般用mkdirs();
方法测试,代码如下:

// 创建文件
File file = new File("/Users/username/example/test.txt");
if (file.createNewFile()) {
    System.out.println("创建文件成功:" + file.getAbsolutePath());
} else {
    System.out.println("创建文件失败:" + file.getAbsolutePath());
}

// 删除文件
if (file.delete()) {
    System.out.println("删除文件成功:" + file.getAbsolutePath());
} else {
    System.out.println("删除文件失败:" + file.getAbsolutePath());
}

// 创建多级目录
File directory = new File("/Users/username/example/subdir1/subdir2");
if (directory.mkdirs()) {
    System.out.println("创建目录成功:" + directory.getAbsolutePath());
} else {
    System.out.println("创建目录失败:" + directory.getAbsolutePath());
}

5、目录的遍历

String[] list() :返回一个 String 数组,表示该 File 目录中的所有子文件或目录。
File[] listFiles() :返回一个 File 数组,表示该 File 目录中的所有的子文件或目录。

File directory = new File("/Users/itwanger/Documents/Github/paicoding");

// 列出目录下的文件名
String[] files = directory.list();
System.out.println("目录下的文件名:");
for (String file : files) {
    System.out.println(file);
}

// 列出目录下的文件和子目录
File[] filesAndDirs = directory.listFiles();
System.out.println("目录下的文件和子目录:");
for (File fileOrDir : filesAndDirs) {
    if (fileOrDir.isFile()) {
        System.out.println("文件:" + fileOrDir.getName());
    } else if (fileOrDir.isDirectory()) {
        System.out.println("目录:" + fileOrDir.getName());
    }
}

listFiles在获取指定目录下的文件或者子目录时必须满足下面两个条件:

  • 指定的目录必须存在
  • 指定的必须是目录。否则容易引发 NullPointerException 异常

6、递归遍历

不说啥了,直接上代码:

public static void main(String[] args) {
    File directory = new File("/Users/itwanger/Documents/Github/paicoding");

    // 递归遍历目录下的文件和子目录
    traverseDirectory(directory);
}

public static void traverseDirectory(File directory) {
    // 列出目录下的所有文件和子目录
    File[] filesAndDirs = directory.listFiles();

    // 遍历每个文件和子目录
    for (File fileOrDir : filesAndDirs) {
        if (fileOrDir.isFile()) {
            // 如果是文件,输出文件名
            System.out.println("文件:" + fileOrDir.getName());
        } else if (fileOrDir.isDirectory()) {
            // 如果是目录,递归遍历子目录
            System.out.println("目录:" + fileOrDir.getName());
            traverseDirectory(fileOrDir);
        }
    }
}

三、RandomAccessFile

RandomAccessFile 是 Java 中一个非常特殊的类,它既可以用来读取文件,也可以用来写入文件。与其他 IO 类(如 FileInputStream 和 FileOutputStream)不同,RandomAccessFile 允许您跳转到文件的任何位置,从那里开始读取或写入。这使得它特别适用于需要在文件中随机访问数据的场景,如数据库系统。

下面是一个使用 RandomAccessFile 的示例,包括写入和读取文件:

import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFileDemo {

    public static void main(String[] args) {
        String filePath = "logs/javabetter/itwanger.txt";

        try {
            // 使用 RandomAccessFile 写入文件
            writeToFile(filePath, "Hello, 沉默王二!");

            // 使用 RandomAccessFile 读取文件
            String content = readFromFile(filePath);
            System.out.println("文件内容: " + content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void writeToFile(String filePath, String content) throws IOException {
        try (RandomAccessFile randomAccessFile = new RandomAccessFile(filePath, "rw")) {
            // 将文件指针移动到文件末尾(在此处追加内容)
            randomAccessFile.seek(randomAccessFile.length());

            // 写入内容
            randomAccessFile.writeUTF(content);
        }
    }

    private static String readFromFile(String filePath) throws IOException {
        StringBuilder content = new StringBuilder();

        try (RandomAccessFile randomAccessFile = new RandomAccessFile(filePath, "r")) {
            // 将文件指针移动到文件开始处(从头开始读取)
            randomAccessFile.seek(0);

            content.append(randomAccessFile.readUTF());
        }

        return content.toString();
    }
}

为了避免中文乱码问题,我们使用 RandomAccessFile 的 writeUTF 和 readUTF 方法,它们将使用 UTF-8 编码处理字符串。大家可以运行一下这段代码,体验一下。
在这里插入图片描述
接下来,会详细介绍一下 RandomAccessFile 的构造方法和常用的方法。
构造方法
RandomAccessFile 主要有两个构造方法:

  • RandomAccessFile(File file, String mode):使用给定的文件对象和访问模式创建一个新的 RandomAccessFile 实例。
  • RandomAccessFile(String name, String mode):使用给定的文件名和访问模式创建一个新的 RandomAccessFile 实例。

访问模式 mode 的值可以是:

  • “r”:以只读模式打开文件。调用结果对象的任何 write 方法都将导致 IOException。
  • “rw”:以读写模式打开文件。如果文件不存在,它将被创建。
  • “rws”:以读写模式打开文件,并要求对内容或元数据的每个更新都被立即写入到底层存储设备。这种模式是同步的,可以确保在系统崩溃时不会丢失数据。
  • “rwd”:与“rws”类似,以读写模式打开文件,但仅要求对文件内容的更新被立即写入。元数据可能会被延迟写入。

1、主要方法

  • long getFilePointer():返回文件指针的当前位置。
  • long length():返回此文件的长度。
  • int read():从该文件中读取一个字节数据。
  • int read(byte[] b):从该文件中读取字节数据并将其存储到指定的字节数组中。
  • int read(byte[] b, int off, int len):从该文件中读取字节数据并将其存储到指定的字节数组中,从偏移量 off 开始,最多读取 len 个字节。
  • String readLine():从该文件中读取一行文本。
  • readUTF():从文件读取 UTF-8 编码的字符串。此方法首先读取两个字节的长度信息,然后根据这个长度读取字符串的 UTF-8 字节。最后,这些字节被转换为 Java 字符串。这意味着当你使用 readUTF 方法读取字符串时,需要确保文件中的字符串是使用 writeUTF 方法写入的,这样它们之间的长度信息和编码方式才能保持一致。
  • void seek(long pos):将文件指针设置到文件中的 pos 位置。
  • void write(byte[] b):将指定的字节数组的所有字节写入该文件。
  • void write(byte[] b, int off, int len):将指定字节数组的部分字节写入该文件,从偏移量 off 开始,写入 len 个字节。
  • void write(int b):将指定的字节写入该文件。
  • writeUTF(String str):将一个字符串以 UTF-8 编码写入文件。此方法首先写入两个字节的长度信息,表示字符串的 - - - UTF-8 字节长度,然后写入 UTF-8 字节本身。因此,当你使用 writeUTF 写入字符串时,实际写入的字节数会比字符串的 UTF-8 字节长度多两个字节。这两个字节用于在读取字符串时确定正确的字符串长度。

再来看一个示例,结合前面的讲解,就会彻底掌握 RandomAccessFile。

File file = new File("logs/javabetter/itwanger.txt");

try (RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
    // 写入文件
    raf.writeUTF("Hello!");

    // 将文件指针移动到文件开头
    raf.seek(0);

    // 读取文件内容
    String content = raf.readUTF();
    System.out.println("内容: " + content);

} catch (IOException e) {
    e.printStackTrace();
}

在这个示例中,我们首先创建了一个名为 itwanger.txt 的文件对象。然后我们使用 RandomAccessFile 以读写模式打开这个文件。

接下来,我们使用 writeUTF 方法将字符串"Hello, 沉默王二!“写入文件。然后,我们使用 seek 方法将文件指针移动到文件开头,并使用 readUTF 方法读取文件内容。输出应该是"Hello!”。

最后,我们使用try-with-resources语句确保 RandomAccessFile 在操作完成后被正确关闭。

四、Apache FileUtils 类

FileUtils 类是 Apache Commons IO 库中的一个类,提供了一些更为方便的方法来操作文件或目录。

1、复制文件或目录:

File srcFile = new File("path/to/src/file");
File destFile = new File("path/to/dest/file");
// 复制文件
FileUtils.copyFile(srcFile, destFile);
// 复制目录
FileUtils.copyDirectory(srcFile, destFile);

2、删除文件或目录:

File file = new File("path/to/file");
// 删除文件或目录
FileUtils.delete(file);

需要注意的是,如果要删除一个非空目录,需要先删除目录中的所有文件和子目录。

3、移动文件或目录:

File srcFile = new File("path/to/src/file");
File destFile = new File("path/to/dest/file");
// 移动文件或目录
FileUtils.moveFile(srcFile, destFile);

4、查询文件或目录的信息:

File file = new File("path/to/file");
// 获取文件或目录的修改时间
Date modifyTime = FileUtils.lastModified(file);
// 获取文件或目录的大小
long size = FileUtils.sizeOf(file);
// 获取文件或目录的扩展名
String extension = FileUtils.getExtension(file.getName());

五、Hutool FileUtil 类

FileUtil 类是 Hutool 工具包中的文件操作工具类,提供了一系列简单易用的文件操作方法,可以帮助 Java 开发者快速完成文件相关的操作任务。

FileUtil 类包含以下几类操作工具:

  • 文件操作:包括文件目录的新建、删除、复制、移动、改名等
  • 文件判断:判断文件或目录是否非空,是否为目录,是否为文件等等。
  • 绝对路径:针对 ClassPath 中的文件转换为绝对路径文件。
  • 文件名:主文件名,扩展名的获取
  • 读操作:包括 getReader、readXXX 操作
  • 写操作:包括 getWriter、writeXXX 操作
    下面是 FileUtil 类中一些常用的方法:

1、copyFile:复制文件。该方法可以将指定的源文件复制到指定的目标文件中。

File dest = FileUtil.file("FileUtilDemo2.java");

2、move:移动文件或目录。该方法可以将指定的源文件或目录移动到指定的目标文件或目录中。

FileUtil.move(file, dest, true);

3、del:删除文件或目录。该方法可以删除指定的文件或目录,如果指定的文件或目录不存在,则会抛出异常。

FileUtil.del(file);

4、rename:重命名文件或目录。该方法可以将指定的文件或目录重命名为指定的新名称。

FileUtil.rename(file, "FileUtilDemo3.java", true);

5、readLines:从文件中读取每一行数据。

FileUtil.readLines(file, "UTF-8").forEach(System.out::println);

赠人玫瑰,手有余香,如果觉得有用,点个赞吧~~~~~

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

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

相关文章

提高运算放大器输出功率

运算放大器的串联:如何同时实现高精度和高输出功率 复合放大器 复合放大器由两个单独放大器组合而成,分别具有不同的特性。 图1所示就是这种结构。放大器1为低噪声精密放大器ADA4091-2。 在本例中,放大器2为AD8397,具有高输出功率&#xff…

召回/粗排阶段 负样本常见构造方法

文章目录 1、曝光未点击2、全局随机选择负例3、batch内随机选择负例4、曝光数据随机选择负例5、基于popularity随机选择负例6、基于hard选择负例大佬的总结: 大佬的名言:“如果精排是特征的艺术,那么召回就是样本的艺术(负样本为王…

linux 用mv替代rm将文件移动到回收站,避免误操作

有时候在linux上操作rm -rf 删除命令时,不下心就会将不想删除的文件给删除了,删完后,顿时傻眼了,比如 ,文件夹test下面有 a ,a1 ,b ,b2四个文件,本来想删除test文件夹下面的a和a1连个文件, 输入…

TCP、UDP原理、DNS协议、CDN原理

1. 如何理解UDP 和 TCP? 区别? 应用场景? 一、UDP UDP(User Datagram Protocol),用户数据包协议,是一个简单的面向数据报的通信协议,即对应用层交下来的报文,不合并,不拆分,只是…

Win10搭建Docker Desktop

Win10搭建Docker Desktop 1 介绍 Docker Desktop是适用于Windows的Docker桌面,是Docker设计用于在Windows 10上运行。它是一个本地 Windows 应用程序,为构建、交付和运行dockerized应用程序提供易于使用的开发环境。Docker Desktop for Windows 使用 Wi…

ChatGPT 插件,组合后更妙了

ChatGPT 插件,组合后更妙 大家好,我是章北海mlpy 昨天极简介绍了一些热门的ChatGPT插件 我测试了一些组合玩法,感觉效率、效果都远超预期。 今天就演示一下如何利用多个插件,高速阅读、理解一篇论文。 备注:一个C…

HTB靶机013-Poison-WP

013-Poison 靶机IP: 10.10.10.84 Scan Nmap 快速扫描: ┌──(xavier㉿kali)-[~] └─$ sudo nmap -sSV -T4 10.10.10.84 -F Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-30 16:41 CST Nmap scan report for 10.10.10.84 Host is up (0.27s…

公牛车充拆解 | 拓尔微A+C双口快充方案IM2403+TMI3451

在快节奏的生活中,手机已成为人们不可或缺的工具。对于经常开车出门的人来说,在车上给手机充电已经成为刚需,因此车载充电器是很多车主的不二之选,它能便捷地解决手机在车内充电的问题,让车主在开车途中保持电量充足。…

MySQL高级_第10章_索引优化与查询优化

MySQL高级_第10章_索引优化与查询优化 1. 数据准备 学员表 插 50 万 条, 班级表 插 1 万 条。 步骤 1 :建表 CREATE TABLE class ( id INT ( 11 ) NOT NULL AUTO_INCREMENT , className VARCHAR ( 30 ) DEFAULT NULL , address …

FlinkKafkaProducer 源码分析

initializeState 先查询是否开启isCheckpointingEnabled配置,如果没开,但是使用了EXACTLY_ONCE或者AT_LEAST_ONCE语义,就报错。 然后从checkpoint中保存的state中读取nextTransactionalIdHintState。 NEXT_TRANSACTIONAL_ID_HINT_DESCRIPTOR…

表情、特殊字符、字符串截取

码元与码点 关于码元和和码点,通过一个例子进行介绍。 如图,字符串😊只有一个“笑脸”符号,但是通过length属性发现,“长度”为2,string.length到底表示什么? 答:码元的个数 什么是…

C语言爬取HTML-爬取壁纸 文末附源码

前言:这学期计算机软件课程设计的其中一个题目是使用C语言爬取HTML,本打算使用C语言的CSpidr库来实现,但是因为它的依赖liburi没有找到在哪里安装,所以放弃了这个想法,使用的是curl以及libxml2这两个库,能够…

这几款实用且有趣的软件不容错过

软件一:天若ocr 这款Windows平台的天若OCR文字识别工具一定更适合你。 软件作者来自天若游心,我爱破解。 发布一年半以来一直深受好评,更新速度也非常快。 最近,它增加了批次识别功能。 软件二:腾讯柠檬精简版 除了Q…

P2233 [HNOI2002]公交车路线

题目描述 在长沙城新建的环城公路上一共有 8 个公交站,分别为 A、B、C、D、E、F、G、H。公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另外一个公交站往往要换几次车,例如从公交站 A 到公交站 D,你就至少需要…

keycloak介绍与使用示例,超时时间设置

keycloak介绍 Keycloak是一款由Red Hat开源社区开发的开放源代码的身份和访问管理解决方案,它提供了安全的单点登录(SSO)、多因素身份验证、社交登录和基于角色的访问控制等功能Keycloak基于OAuth 2.0和OpenID Connect协议,并支持SAML 2.0,可…

spring Bean的循环依赖问题

public class Husband {private String name;private Wife wife;public void setName(String name) {this.name name;}public String getName() {return name;}public void setWife(Wife wife) {this.wife wife;}// toString()方法重写时需要注意:不能直接输出wif…

【计算机网络基础】章节测试2 物理层

文章目录 判断题选择题辨析题应用题 判断题 现在的无线局域网常用的频段是2.8GHz和5.4GHz。 多模光纤只适合于近距离传输。√ 数据在计算机内部多采用串行传输方式,但在通信线路上多采用并行传输方式。 统计时分复用可以按需动态分配时隙。√ 相对于同步时分复用…

卷麻了,新来的00后实在是太卷了...

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&…

geoserver切片数据本地缓存和层级配置

很多业务场景中,我们会用到图层切片功能,默认情况下,每次调用都是新的重新切片,这样在性能上存在一定问题;基于此我们可以进行本地缓存切片,及此地理位置只进行一次切片处理,数据缓存在本地磁盘…

基于Python实现线性分类器

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 在机器学习领域,分类的目标是指将具有相似特征的对象聚集。而一个线性分类器则透过特征的线性组合来做出分类决定,以达到此种目的。对象的特征通常被描述为特征值,而在向量中则描述为特征向…