Go_IO操作文件/目录

2023-10-27

创建/删除目录

Go语言IO操作可以通过os包或bufio包,bufio是带缓冲的

创建目录:

  • os.Mkdir():创建单个目录,如果存在则失败

  • os.MkdirAll():创建多级目录,如果存在则不操作

name perm
文件路径 操作权限
func main() {
	// ModePerm = 0777  授最高权限,
	err := os.Mkdir("/Users/itzhuzhu/Desktop/笔记", os.ModePerm)
	if err != nil {
		fmt.Println("Mkdir创建目录失败:", err)
	} else {
		fmt.Println("Mkdir创建目录成功")
	}

	err = os.MkdirAll("/Users/itzhuzhu/Desktop/笔记/a/b/c", os.ModePerm)
	if err != nil {
		fmt.Println("MkdirAll创建目录失败:", err)
	} else {
		fmt.Println("MkdirAll创建目录成功")
	}
}

删除文件或目录

  • Remove:删除文件或空目录,不存在则报错
  • RemoveAll:删除文件或目录(包含所有子目录),不存在不操作
func main() {
	err := os.Remove("/Users/itzhuzhu/Desktop/笔记/test")
	if err != nil {
		fmt.Println("Remove删除目录失败:", err)
	} else {
		fmt.Println("Remove删除目录成功")
	}

	err = os.RemoveAll("/Users/itzhuzhu/Desktop/笔记/a")
	if err != nil {
		fmt.Println("RemoveAll删除目录失败:", err)
	} else {
		fmt.Println("RemoveAll删除目录成功")
	}
}

创建文件:

os.Create:文件不存在则创建,存在则删除文件中的内容,成为新文件,该函数本质上是在调用os.OpenFile()函数,

func main() {
  // 返回创建文件的指针
	file, err := os.Create("/Users/itzhuzhu/Desktop/笔记/test.txt")
	if err != nil {
		fmt.Println("创建失败  ", err)
	}
	fmt.Println("创建成功  ")
	defer file.Close()
}

打开文件:

os.OpenFile():打开文件,OpenFile有三个参数:

  • name:打开文件的路径
  • flag:模式,常见的模式有
参数 说明
O_RDONLY 只读方式打开
O_WRONLY 只写方式打开
O_RDWR 读写方式打开
O_APPEND 追加方式打开
O_CREATE 不存在,则创建
O_EXCL 如果文件存在,且标定了O_CREATE的话,则产生一个错误
O_TRUNC 如果文件存在,且它成功地被打开为只写或读写方式,将其长度裁剪唯一(覆盖)
O_NOCTTY 如果文件名代表一个终端设备,则不把该设备设为调用进程的控制设备
O_NONBLOCK 如果文件名代表一个FIFO,或一个块设备,字符设备文件,则在以后的文件及I/O操作中置为非阻塞模式
O_SYNC 当进行一系列写操作时,每次都要等待上次的I/O操作完成再进行
  • perm:表示权限,取值范围(0-7),和linux里操作文件那个权限一样,如果是用OpenFile打开目录写os.ModeDir

0:没有任何权限
1:执行权限(如果是可执行文件,是可以运行的)
2:写权限
3:写权限与执行权限
4:读权限
5:读权限与执行权限
6:读权限与写权限
7:读权限,写权限,执行权限

演示:

func main() {
	file, err := os.OpenFile("/Users/itzhuzhu/Desktop/笔记/test.txt", os.O_RDWR, 6)
	if err != nil {
		fmt.Println("打开失败", err)
	}
	fmt.Println("打开成功")
	defer file.Close()
}

使用Open也可以打开文件,Open底层调用的是OpenFile方法,但是参数是写死了(只读模式),源码如下

func Open(name string) (*File, error) {
	return OpenFile(name, O_RDONLY, 0)
}

读数据:

Read:一次读全部数据,os.Read(读取后存放的切片)

func main() {
	file, err := os.Open("/Users/itzhuzhu/Desktop/笔记/test.txt")
	if err != nil {
		fmt.Println("打开文件失败:", err)
	}
	defer file.Close()

	// 定义一个切片存储文件读取的数据
	buffer := make([]byte, 1024)

	// len:返回读到数据的字节(文件大小)
	len, err := file.Read(buffer)
	if err != nil {
		fmt.Println("读取数据失败:", err)
	}
	fmt.Println("读到:", len, "字节")
	fmt.Println("内容为:", string(buffer)) // 将读到的字节数据转换为string才可以展示出内容
}

ReadFile:读数据更方便,不需要先用Open打开文件,底层调用了Open会自动完成

func main() {
	readFile, _ := os.ReadFile("/Users/itzhuzhu/Desktop/笔记/test.txt")
	fmt.Println(string(readFile))
}

ReadDir读目录:

func main() {
	file, err := os.OpenFile("/Users/itzhuzhu/Desktop/笔记", os.O_RDONLY, os.ModeDir)
	if err != nil {
		fmt.Println(err)
	}
	defer file.Close()

	// 参数:要获取的目录数,全部为负数,通常写-1
	dirAll, _ := file.ReadDir(-1)
	for _, name := range dirAll {
		if name.IsDir() {
			fmt.Println("目录:", name.Name())
		} else {
			fmt.Println("文件:", name.Name())
		}
	}
}

写数据:

Write:一次写入全部数据:

func main() {
	file, err := os.OpenFile("/Users/itzhuzhu/Desktop/笔记/test.txt", os.O_RDWR, 6)
	if err != nil {
		fmt.Println("打开失败:", err)
	}

	str := "我是写进去的数据"
	len, err := file.WriteString(str)
	if err != nil {
		fmt.Println("写入失败:", err)
	}
	fmt.Println("写入成功,长度为:", len, "字节")
	defer file.Close()
}

WriteString:底层调用了Write做了数据转换,参数不需要转字节切片就可以使用

func main() {
	file, err := os.OpenFile("/Users/itzhuzhu/Desktop/笔记/test.txt", os.O_RDWR, 6)
	if err != nil {
		fmt.Println("打开失败:", err)
	}

	str := "我是写进去的数据"
	len, err := file.WriteString(str)
	if err != nil {
		fmt.Println("写入失败:", err)
	}
	fmt.Println("写入成功,长度为:", len, "字节")
	defer file.Close()
}

WriteAt写数据:在指定的位置写入数据

方法 参数 返回值
func (f *File) Seek(offset int64, whence int) (ret int64, err error) offset:偏移量(空格数)
whence:从哪里开始偏移
SeekStart = 0 // 文件的开头
SeekCurrent = 1 // 当前数据的位置
SeekEnd = 2 // 文件的末尾
偏移量长度

Seek:设置下一次读/写的起始的偏移量(位置)

func main() {
	path := "/Users/itzhuzhu/Desktop/笔记/test.txt"
	file, err := os.OpenFile(path, os.O_RDWR, 6)
	if err != nil {
		fmt.Println("打开失败:", err)
	}
	defer file.Close()

	str := "我是WriteAt在指定位置写入的数据"

	/*
		whence:从哪里开始偏移
				SeekStart   = 0 // 文件的开头,会从头覆盖原数据,直到将新数据全部写完
				SeekCurrent = 1 // 当前数据的位置
				SeekEnd     = 2 // 文件的末尾
	*/

	num, err := file.Seek(0, 1)

	/*
		参数1:要写的数据
		参数2:是要写入数据的开始索引,上面引用了io.SeekEnd可以计算出原数据的长度,然后就可以在原数据基础上追加数据,如果写0会从0索引覆盖原数据
		返回值1:写入的字符长度
		返回值2:异常信息
	*/

	len, err := file.WriteAt([]byte(str), num)
	if err != nil {
		fmt.Println("写入失败:", err)
	}
	fmt.Println("共写入数据:", len, "字节")
}

缓冲区读数据:

缓冲区的设计是为了减少读/写大量数据带来的内存开销,先把数据读/写到缓冲区,然后由缓冲区写入系统。当发起一次读写操作时,计算机会先从缓冲区获取数据,如果当缓冲区数据为空,才会从数据源获取数据更新到缓冲区。

方法 作用
func NewReader(rd io.Reader) *Reader 创建一个具有默认大小的缓冲区,底层调用了NewReaderSize
func NewReaderSize(rd io.Reader, size int) *Reader 创建一个具有4096字节的缓冲区
func (b *Reader) ReadBytes(delim byte) ([]byte, error) 1次读1个字节
func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error) 1次读1行,由\n分割
func (b *Reader) ReadRune() (r rune, size int, err error) 1次读1个字符
func (b *Reader) ReadString(delim byte) (string, error) 1次读1个字符串

NewReaderSize读数据

func main() {
	file, err := os.Open("/Users/itzhuzhu/Desktop/笔记/test.txt")
	if err != nil {
		fmt.Println(err)
	}
	defer file.Close()

	// 读数据,定义一个切片存储文件读取的数据
	r := bufio.NewReaderSize(file, 4096)

	// 按行读数据,ReadBytes(遇到则停止的字符)
	for {
		buf, err := r.ReadBytes('\n')
    // 先打印已读到的数据
		fmt.Print(string(buf))
    // 遇到\n继续读下一行
		if err == io.EOF {
			return
		}
	}
}

NewReader读数据

func main() {
	file, err := os.Open("/Users/itzhuzhu/Desktop/笔记/test.txt")
  // 底层调用了NewReaderSize,默认大小是4096
	r := bufio.NewReader(file)
}

使用ReadLine读数据,缓冲区读数据会判断最后返回的有么有EOF,如果没有就继续读,如果有就结束,所以会多读一次。

ReadLine底层调用了ReadSlice,ReadSlice会判断是否遇到\n,如果

func main() {
	file, err := os.Open("/Users/itzhuzhu/Desktop/笔记/test.txt")
	if err != nil {
		fmt.Println(err)
	}
	defer file.Close()

	r := bufio.NewReaderSize(file, 4096)
	i := 0
	for {
		// line:读到的数据
		i++
		line, _, err := r.ReadLine()
		fmt.Println("第", i, "次读数据\t", "大小为:", len(line))
		fmt.Println("数据:", string(line))
		if err == io.EOF {
			return
		}
	}
}

输出:

1 次读数据    大小为: 3
数据: 12 次读数据    大小为: 1
数据: 23 次读数据    大小为: 1
数据: 34 次读数据    大小为: 1
数据: 35 次读数据    大小为: 0
数据:

使用ReadRune读数据

func main() {
	file, err := os.Open("/Users/itzhuzhu/Desktop/笔记/test.txt")
	if err != nil {
		fmt.Println(err)
	}
	defer file.Close()

	r := bufio.NewReaderSize(file, 4096)

	for {
		// size:读到的大小
		readRune, _, err := r.ReadRune()
		fmt.Print(string(readRune))
		if err == io.EOF {
			return
		}
	}
}

ReadString读数据

func main() {
	file, err := os.Open("/Users/itzhuzhu/Desktop/笔记/test.txt")
	if err != nil {
		fmt.Println(err)
	}
	defer file.Close()

	r := bufio.NewReaderSize(file, 4096)

	for {
		readString, err := r.ReadString('\n')
		fmt.Print("数据为:", string(readString))
		if err == io.EOF {
			return
		}
	}
}

Scanner读数据

方法 作用
func NewScanner(r io.Reader) *Scanner 自带缓冲区的读数据方法,大小为4096,默认按行分割
func (s *Scanner) Scan() bool 指定读取分割的方式

Split函数分割的方式:

方法 作用
ScanBytes 按字节分割
SacanLines 按行分割
SacanRunes 按UTF-8字符分割
SacanWords 按单词分割

演示:

func main() {
	file, err := os.Open("/Users/itzhuzhu/Desktop/笔记/test.txt")
	if err != nil {
		fmt.Println("打开文件失败:", err)
	}
	defer file.Close()

	// 创建读数据缓冲
	reader := bufio.NewReader(file)
	// 创建Scanner对象
	scanner := bufio.NewScanner(reader)
	// 指定按行读
	scanner.Split(bufio.ScanLines)
	// 循环读取
	for scanner.Scan() {
		// 打印读到的数据
		fmt.Println(string(scanner.Bytes()))
		fmt.Println(scanner.Text())
	}
}

缓冲区写数据:

方法 作用
func NewWriter(w io.Writer) *Writer 创建一个具有默认大小的缓冲区,底层调用了NewReaderSize
func NewWriterSize(w io.Writer, size int) *Writer 创建一个具有4096字节的缓冲区
func (b *Writer) Flush() error 清空缓冲区并将数据写入
func (b *Writer) WriteByte(c byte) error 1次写1个字节
func (b *Writer) WriteRune(r rune) (size int, err error) 1次写1个字符
func (b *Writer) WriteString(s string) (int, error) 1次写1个字符串

NewWriter写数据

func main() {
	readPath := "/Users/itzhuzhu/Desktop/笔记/test.txt"
	writerPath := "/Users/itzhuzhu/Desktop/笔记/test2.txt"

	// 打开要读的文件
	readFile, err := os.Open(readPath)
	if err != nil {
		fmt.Println(err)
	}
	defer readFile.Close()

	// 创建读缓冲区
	reader := bufio.NewReader(readFile)

	// 打开要写的文件
	writerFile, err := os.OpenFile(writerPath, os.O_RDWR, 6)
	if err != nil {
		fmt.Println(err)
	}
	defer writerFile.Close()

	// 创建写缓冲区
	writer := bufio.NewWriter(writerFile)

	// 循环读数据
	for {
		bytes, err := reader.ReadBytes('\n')
		// 读到了就写到写缓冲区
		writer.Write(bytes)
		// 清空缓冲区,并将缓冲区的数据写到文件
		writer.Flush()
		if err == io.EOF {
			break
		}
	}
}

文件权限:

例:- rwx rwx rwx权限用八进制表示为:0777

位置 含义
第1位 文件类型(d:目录 -:文件)
第2 ~ 4位 u:所属用户权限
第5 ~ 7位 g:所属组权限
第8 ~ 10位 o:其他用户权限

权限使用数字表示:

权限 八进制数字
r 4
w 2
x 1
- 0

filepath:

方法 作用
func IsAbs(path string) bool 是否绝对路径
func Split(path string) (dir, file string) 分割为目录和文件名
func Join(elem …string) string 将多个字符拼接成路径
func Ext(path string) string 返回拓展名,如果是目录则为空
func Base(path string) string 返回路径中最后一个元素
func Dir(path string) string 返回是目录的路径
func ToSlash(path string) string 将路径分隔符替换为/

演示:

func main() {
	path := "/Users/itzhuzhu/Desktop/笔记/test.txt"
	str := "aaa"

	fmt.Println("是否绝对路径:", filepath.IsAbs(path))
  
	dir, file := filepath.Split(path)
	fmt.Println("目录名:", dir, "\t文件名:", file)
  
	fmt.Println("多个字符拼接成路径", filepath.Join(path, str))

	ext := filepath.Ext(path)
	fmt.Println("拓展名为", ext) // 如果是目录结果为空

	base := filepath.Base(path)
	fmt.Println("路径中最后一个元素为:", base)

	s := filepath.Dir(path)
	fmt.Println("目录部分为:", s)

	slash := filepath.ToSlash(path)
	fmt.Println("将路径分隔符替换为/", slash)
}

输出:

是否绝对路径: true
目录名: /Users/itzhuzhu/Desktop/笔记/  文件名: test.txt
多个字符拼接成路径 /Users/itzhuzhu/Desktop/笔记/test.txt/aaa
拓展名为 .txt
路径中最后一个元素为: test.txt
目录部分为: /Users/itzhuzhu/Desktop/笔记
将路径分隔符替换为/ /Users/itzhuzhu/Desktop/笔记/test.txt

Stat

Stat可以查看文件属性

type FileInfo interface {
	Name() string       // 文件名称
	Size() int64        // 文件大小(字节)
	Mode() FileMode     // 文件权限
	ModTime() time.Time // 修改时间
	IsDir() bool        // 是否为目录
	Sys() any           // 底层数据源,不知道这是干嘛的
}

演示:

func main() {
	path := "/Users/itzhuzhu/Desktop/笔记/test22.txt"
	stat, err := os.Stat(path)
	if err != nil {
		fmt.Println("路径错误:", err)
	}
	fmt.Println("文件名称:", stat.Name())
	fmt.Println("文件大小:", stat.Size(), "字节")
	fmt.Println("当前权限:", stat.Mode())
	fmt.Println("修改时间:", stat.ModTime())
	fmt.Println("是否为目录:", stat.IsDir())
	fmt.Println("底层数据源:", stat.Sys())
}

IsNotExist

判断文件是否存在

func main() {
	_, err := os.Stat("/Users/itzhuzhu/Desktop/笔记/test.txt")
	if os.IsNotExist(err) {
		fmt.Println("文件不存在")
	} else {
		fmt.Println("文件存在")
	}
}

Copy

func main() {
	// 打开原数据文件
	oldFile, err := os.Open("/Users/itzhuzhu/Desktop/笔记/test.txt")
	if err != nil {
		fmt.Println("打开源文件失败", err)
	}
	defer oldFile.Close()

	// 打开新文件
	newFile, err := os.OpenFile("/Users/itzhuzhu/Desktop/笔记/NewTest.txt", os.O_RDWR|os.O_CREATE, 0777)
	if err != nil {
		fmt.Println("打开新文件失败", err)
	}
	defer newFile.Close()
	// dst:新文件   str:源文件
	written, err := io.Copy(newFile, oldFile)
	if err != nil {
		fmt.Println("复制失败", err)
	} else {
		fmt.Println("复制成功,共", written, "字节")
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go_IO操作文件/目录 的相关文章

  • Go内存管理及性能观测工具

    内存管理 TCMalloc Golang内存分配算法主要源自Google的TCMalloc算法 TCMalloc将内存分成三层最外层Thread Cache 中间层Central Cache 最里层Page Heap Thread Cach
  • golang-bufio 缓冲扫描

    前面两篇博客 介绍了 bufio 包中的缓冲读和写 bufio go 下面再来介绍一下缓冲扫描 scan go 这个扫描的是用来对缓存读的更高级封装 提供了一些更易用的方法 缓冲扫描 Scanner 提供了一个方便的接口来读取数据 例如使用
  • go踩坑——no required module provides package go.mod file not found in current directory or any parent

    背景 准备运行下面代码 package main import github com gin gonic gin func main 创建一个默认的路由引擎 r gin Default GET 请求方式 hello 请求的路径 当客户端以G
  • Go语言入门【09】结构体

    结构体 相比于Java 在Go语言中没有类的概念 但是多了结构体 结构体与Java中的类很像 是表示一系列同一类型或不同类型的数据构成的数据集合 例如可以将学生抽象成一个结构体 每一个学生有以下属性 Name 姓名 Age 年龄 Gende
  • go Cobra命令行工具入门

    简介 Github https github com spf13 cobra Star 26 5K Cobra是一个用Go语言实现的命令行工具 并且现在正在被很多项目使用 例如 Kubernetes Hugo和Github CLI等 通过使
  • Golang-使用 goroutine 运行闭包的“坑”

    介绍 在 Go 语言中 函数支持匿名函数 闭包就是一种特殊的匿名函数 它可以用于访问函数体外部的变量 需要注意的是 在 for range 中 使用 goroutine 执行闭包时 经常会掉 坑 因为匿名函数可以访问函数体外部的变量 而 f
  • go语言基础-----03-----流程控制、函数、值传递、引用传递、defer函数

    1 流程控制 这里只讲 for range 语句 这个关键字 主要用于遍历 用来遍历数组 slice map chan 例如 package main import fmt func main str hello world 中国 for
  • Golang三剑客之Pflag、Viper、Cobra

    如何构建应用框架 想知道如何构建应用框架 首先你要明白 一个应用框架包含哪些部分 在我看来 一个应用框架需要包含以下 3 个部分 命令行参数解析 主要用来解析命令行参数 这些命令行参数可以影响命令的运行效果 配置文件解析 一个大型应用 通常
  • 基于Go语言实现简易Web应用

    目录 前言 Go语言特点 写在使用Go语言实现Web应用前面 创建Web服务器 声明一个结构体操作 加入中间件的使用 使用静态文件服务器 最后 前言 在编程语言中 近几年问世的几个新语言都是非常不错的 比如Go Python Rust等等
  • 【go语言开发】Minio基本使用,包括环境搭建,接口封装和代码测试

    本文主要介绍go语言使用Minio对象存储 首先介绍搭建minio 创建bucket等 然后讲解封装minio客户端接口 包括但不限于 上传文件 下载 获取对象url 最后测试开发的接口 文章目录 前言 Minio docker安装mini
  • go-zero开发入门之网关往rpc服务传递数据2

    go zero 的网关服务实际是个 go zero 的 API 服务 也就是一个 http 服务 或者说 rest 服务 http 转 grpc 使用了开源的 grpcurl 库 当网关需要往 rpc 服务传递额外的数据 比如鉴权数据的时候
  • go-zero开发入门-API网关开发示例

    开发一个 API 网关 代理 https blog csdn net Aquester article details 134856271 中的 RPC 服务 网关完整源代码 file main go package main import
  • go-zero开发入门之网关往rpc服务传递数据1

    go zero 的网关往 rpc 服务传递数据时 可以使用 headers 但需要注意前缀规则 否则会发现数据传递不过去 或者对方取不到数据 go zero 的网关对服务的调用使用了第三方库 grpcurl 入口函数为 InvokeRPC
  • go-zero开发入门-API服务开发示例

    接口定义 定义 API 接口文件 接口文件 add api 的内容如下 syntax v1 info title API 接口文件示例 desc 演示如何编写 API 接口文件 author 一见 date 2023年12月07日 vers
  • go-zero开发入门-API网关鉴权开发示例

    本文是 go zero开发入门 API网关开发示例 一文的延伸 继续之前请先阅读此文 在项目根目录下创建子目录 middleware 在此目录下创建文件 auth go 内容如下 鉴权中间件 package middleware impor
  • GoLong的学习之路,进阶,Viper(yaml等配置文件的管理)

    本来有今天是继续接着上一章写微服务的 但是这几天有朋友说 再写Web框架的时候 遇到一个问题 就是很多的中间件 redis 微信 mysql mq 的配置信息写的太杂了 很不好管理 希望我能写一篇有管理配置文件的 所以这篇就放到今天写吧 微
  • Go 语言中切片的使用和理解

    切片与数组类似 但更强大和灵活 与数组一样 切片也用于在单个变量中存储相同类型的多个值 然而 与数组不同的是 切片的长度可以根据需要增长和缩小 在 Go 中 有几种创建切片的方法 使用 datatype values 格式 从数组创建切片
  • go开发--操作mysql数据库

    在 Go 中访问 MySQL 数据库并进行读写操作通常需要使用第三方的 MySQL 驱动 Go 中常用的 MySQL 驱动有 github com go sql driver mysql 和 github com go xorm xorm
  • Golang拼接字符串性能对比

    g o l a n g golang g o l an g
  • 这套Go语言开发框架组合真的非常高效

    我尝试过很多框架 从Django Flask和Laravel到NextJS和SvelteKit 到目前为止 这是我唯一可以使用的不会让我感到疯狂或者放弃项目的堆栈 框架 我喜欢所有这些框架 但我只是不太适应它们的设计方式 实际上 我是一个弱

随机推荐

  • 学不会设计模式,是因为你还没用过这个神奇的网站!

    公众号关注 GitHubDaily 设为 星标 每天带你逛 GitHub 大家好 我是小 G 如果我们将程序员简单分为两类人 一类对于软件设计模式一头雾水 代码写的随心所欲 另一类将设计模式玩的炉火纯青 代码写的优雅如诗 那么 后者写出来的
  • molyx2.6.1论坛转换至Discuz!x3.2

    molyx是一个很久前的论坛程序了 开发维护早已停止 网上也搜不到什么资料 坛子用的还是molyx2 6 1的程序 数据库规模变大以后 论坛会出各种问题 所以决定要迁移到更大众化的Discuz上去 转换程序是从discuz官网上下载的Com
  • 2.4.12 Profile虚拟SCSI卡参数

    最后更新2021 07 24 在本节我们参考 lt 图 250 虚拟SCSI卡参数设置 gt 来了解虚拟SCSI卡参数 其中左图来自普通AIX分区 右图来自VIO Server 图 251 虚拟SCSI卡参数设置 第一个参数与虚拟以太网卡相
  • Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvargus

    使用Jetson TX2连接猎豹相机 程序报错自动退出后 相机无法再次启动 报错 Error generated dvs git dirty git master linux multimedia nvgstreamer gst nvarg
  • dash 机器人 Android,用于 Dash 和 Dot 机器人的Blockly

    编辑点评 可视化少儿编程工具 用于 Dash 和 Dot 机器人的Blockly 介绍 用于 Dash 和 Dot 机器人的Blockly 请注意 要使用此应用程序 需要有 Wonder Workshop 机器人 Dash 或 Dot 以及
  • IDEA 中,Gradle:Download https:// jcenter.bintray.com/ 下载不下来

    1 找到C盘中当前目录 将gradle下来好的压缩包解压到该目录下 个人的根基目录不一致 根据实际情况看 2 修改自己电脑的DNS 晚上随便搜索 例如 202 96 128 68 3 再次运行IDEA 就可以正常打包了
  • 王者体验服服务器注册人数已满,王者官方大厅奖励有多难获得?服务器直接崩溃,玩家:别发红包了...

    可乐要加冰 乔妹在你心 大家好我是小乔妹 每天为您分享有趣的王者资讯 感谢您的关注 王者荣耀一直以来都有许许多多的活动 有限时活动也有长久活动 但官方专属大厅奖励活动确实王者史上第一次奖励 因此就有很多玩家期待这次专属活动的福利是什么 这次
  • xp系统打开ping服务器地址,WinXP如何用批处理文件鉴定IP地址Ping是否连通

    内容来源 系统之家 今天来聊聊一篇关于WinXP如何用批处理文件鉴定IP地址Ping是否连通的文章 现在就为大家来简单介绍下WinXP如何用批处理文件鉴定IP地址Ping是否连通 希望对各位小伙伴们有所帮助 鉴定方法 打开记事本 在窗口中输
  • 2021年10月程序员薪资出炉,你在哪个层级?

    叮咚 10月份程序员薪资表新鲜出炉 先从地域上来看 城市的平均工资排行 依然是北上深占据着前三位 其中北京以18094 3的平均工资成为了众多城市的天花板 接下来我们一起来看看新出炉的 10 月份程序员工资表 城市 10月程序员薪资排名靠前
  • python爬虫爬取高清图片——爬虫入门

    自动抓取某图片网站高清壁纸并下载保存 使用requests请求网页 bs4解析数据 话不多说直接看代码 刚学不久欢迎指点 codeing utf 8 Time 2022 11 7 15 22 Author 摸摸头发在不在 File geti
  • Hexagon GDB Debugger介绍(14)

    Hexagon GDB Debugger介绍 14 2 9 2 连续和单步调试 2 9 2 连续和单步调试 连续意味着恢复程序执行 直到程序正常完成 相比之下 单步调试意味着只执行程序的一个 step 其中 step 可能意味着一行源代码或
  • 数字信号处理实验(三):离散时间傅里叶变换

    1 dfdt function X dtft x n w 计算离散时间付里叶变换 X dtft x n w X 在w频率点上的DTFT数组 x n点有限长度序列 n 样本位置向量 w 频率点位置向量 X x exp j n w 2 idfd
  • vscode配置 SSH 链接服务器

    什么是SSH Secure Shell 安全外壳协议 简称SSH 是一种加密的网络传输协议 可在不安全的网络中为网络服务提供安全的传输环境 SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接 SSH最常见的用途是远程登录系统
  • ICCV 2019 COCO & Mapillary挑战赛冠军团队技术分享

  • Data URI scheme

    什么是Data URI Scheme data URI scheme 允许我们使用内联 inline code 的方式在网页中包含数据 目的是将一些小的数据 直接嵌入到网页中 从而不用再从外部文件载入 常用于将图片嵌入网页 HTML中网页图
  • 西米支付:数字人民币常识普及

    1 1 什么是数字人民币 数字人民币 英文简称 e CNY 是由人民银行发行的数字形式的法定货币 由指定 运营机构参与运营 以广义账户体系为基础 支持银行账户松耦合功能 意味着用户既可 以选择将数字人民币钱包与自己已经开设的银行账户进行绑定
  • Linux基础知识专栏-进程通信

    一 通信原理及基础知识 通讯原理 服务端创建一个命名管道 并监控管道中是否存在内容 倘若有则读取 或者根据内容进行相应的响应 客户端判断是否存在命名管道 往管道中输入数据 服务端即可接收到数据 单向通讯实现 客户端写入 服务端读取 serv
  • 《14天从0到1学Java》第一天之07Java变量和常量

    这个是一套系列教程 一共14天 每天8篇 每篇需要5分钟 也就是说 你需要每天抽出40分钟来看教程 坚持14天就可以 轻松玩转JavaSE 我是Feri 我为自己代言 专注IT职场研发和教育N年 希望对于你的入门 有所帮助 本篇目录 一 常
  • JAVASE

    JAVASE 主要内容 API使用 Object类 String类 今日学习需加强部分 今 学习 情记录 写给明天的 第一章 API 1 1 概述 API Application Programming Interface 应用程序编程接口
  • Go_IO操作文件/目录

    创建 删除目录 Go语言IO操作可以通过os包或bufio包 bufio是带缓冲的 创建目录 os Mkdir 创建单个目录 如果存在则失败 os MkdirAll 创建多级目录 如果存在则不操作 name perm 文件路径 操作权限 f