先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:xhs1999xhs (备注Java)
正文
前言
作者:小蜗牛向前冲
名言:我可以接受失败,但我不能接受放弃
如果觉的博主的文章还不错的话,还请************************************************************************************************************************************************************************************************************************************************************
************************************************************************************************************************************************************************************************************************************************************点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。
目录
本期学习目标:谈谈对文件的认识,认识操纵系统的文件接口。
一、认识操纵系统下的文件
1、什么是文件
在平常我们对于文件的认识都是在window操纵系统下认识,我们建立的目录是文件,文本文档是文件,图片是文件。
在Linux中有这么一句话:Linux下一切皆文件。
为什么这么说的呢?
Linux中所有的内容都是以文件的形式保存的,我们认为普通文件是文件,一个目录我们也称为文件,甚至认为硬件设备(键盘,硬盘,打印机等)是文件。
Linux有一个根目录,其他的所以的文件都放在根目录中。
2、文件的类型
普通文件
直接就可以使用的我们就称为普通文件,如上面的makefile就是一个普通文件
目录文件
这个目录中包含各个文件的文件名和文件及其指向这些文件的指针,只要有权限就可以访问目录中的任何文件,上面的myshell就是一个目录文件,一个目录不仅仅有目录名,还有一些权限设置、文件大小等。
其他的一些文件类型:字符设备文件和块设文件、套接字文件(socket)、符号链接文件(symbolic link)、管道文件(pipe)。
3、文件的共识
- 空文件,也要在磁盘中占据空间。
- 文件 = 内容 +属性。
- 文件操纵 = 对内容 + 对属性.
- 如果没有指明对应的文件的路径,和默认当前路径。
- 当我们通过fopen,fclose,fwrite,fread对文件进行操纵的时候,编译代码,形成可执行的程序,但是不运行,对于的文件操纵执行了吗?没有(对文件的操纵,本质上是进程对文件的操纵)。
- 一个文件没有被打开,可以直接进行文件的访问吗?不能
通过上面的共识我们可以得出,对文件的操纵的本质 :是进程和打开文件的关系。
二、系统级的文件操作接口
我们在C语言和C++都有对文件的操纵函数,我们都知道文件是存放在磁盘上的,而要想访问文件就必须将磁盘上的文件导入到内存中,在进行相应的操作,其实本质上是操作系统在对这些文件进行管理,而C语言和C++中对文件的操作的接口,他底层也是操作系统对文件操作的接口,只是通过了封装了而已。
1、文件打开open/文件关闭close
文件打开open
头文件:<sys/types.h>、 <sys/stat.h>、<fcntl.h>
访问形式:
1、int open(const char *pathname, int flags);
2、int open(const char *pathname, int flags, mode_t mode);
当我们要调用open接口就必须包含相应的头文件,但这里要注意的是这里接口为我们提供了二个调用的方式,方式1是文件已经存在我们调用,方式2是文件不存在时要调用的接口。
接口参数:
const char *pathname:这里就指我们要打开的文件名
int flags:指的是标记位,传过来的比特位,不同的比特位就调用不同选项,从对文件进行一些初始化。
mode_t mode:这里是设置相应的权限(如操作系统默认的普通文件的权限是0x666)
这里我们要重点了解open接口的第二个参数,上面我们说他是一个标记位 ,我们知道一个int是有32个比特位了,这里我们用每个比特位表示不同的选项。
下面我们看一段代码理解一下:
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <assert.h>
// 每一个宏,对应的数值,只有一个比特位是1,彼此位置不重叠
#define ONE (1<<0)
#define TWO (1<<1)
#define THREE (1<<2)
#define FOUR (1<<3)
void show(int flags)
{
if(flags & ONE) printf("one\n");
if(flags & TWO) printf("two\n");
if(flags & THREE) printf("three\n");
if(flags & FOUR) printf("four\n");
}
int main()
{
show(ONE);
printf("-----------------------\n");
show(TWO);
printf("-----------------------\n");
show(ONE | TWO);
printf("-----------------------\n");
show(ONE | TWO | THREE);
printf("-----------------------\n");
show(ONE | TWO | THREE | FOUR);
printf("-----------------------\n");
return 0;
}
当我们运行代码,就会发现我们通过不同的比特位就调用了不同的参数选项,展现出现不同的效果。
flags多个选项:
- O_RDONLY: 只读打开
- O_WRONLY: 只写打开
- O_RDWR : 读,写打开
- 这三个常量,必须指定一个且只能指定一个
- O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权
- O_APPEND**😗* 追加写
- O_TRUNC**:**如果文件已经存在,且成功打开,则删除文件中原来的全部数据
对于这些选项我们还可以进行功能的多选,选项间用 “ | ” 分割
O_RDONY | O_CREAT//这里的文件用只读的方式创建,如果没有这个文件会自动创建
返回值
- 成功:新打开的文件描述符(fd)
- 失败:-1
文件关闭 close
文件关闭接口用起来非常简单,只要给他传打开文件的文件描述符就可以了。
2、其他的文件接口
read读文件
函数原型:
ssize_t read(int fd, void *buf, size_t count);
参数
- fd:是文描述符
- buf:接收读取数据的缓存区
- count:读取的字节数
- 返回值:读取成功则返回读取的字节数,读取到文件尾则返回0,读取失败则返回-1,同时设置全局变量errno的值来表示错误原因;
write写文件
函数原型:
ssize_t write(int fd, const void *buf, size_t count);
参数:
- fd:是文描述符
- buf:存放写入数据的缓存区
- count:写入的的字节数
- 返回值:写入成功则返回实际写入的字节数,写入失败则返回-1,同时设置全局变量errno的值来表示错误原因;
3、代码演示文件操作
下面为了更好的理解文件操作,为了大家演示了文件的打开,写入和读取数据,最后在关闭。
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
//定义文件名
char filename[] = "pjb.txt";
//定义写入的数据
char write_data[] = "hellow Linux!";
//读取的数据
char read_buf[64] = { 0 };
//测试写入数据
int fd = open(filename, O_RDWR | O_CREAT, O664);
if (fd < 0)
{
perror("open");
return -1;
}
//写入内容
int ret = write(fd, write_data, sizeof(write_data));
if (ret < 0)
{
perror("write");
return -1;
}
else
{
printf("write: %s\n", write_data);
}
//关闭文件
close(fd);
//测试写入文件
fd = open(filename, O_RDONLY);;
if (fd < 0)
{
perror("open");
return -1;
}
//写入
ret = read(fd, read_buf, sizeof(read_buf));
if (ret < 0)
{
perror("read");
return -1;
}
else
{
printf("read: %s\n", read_buf);
}
close(fd);
return 0;
}
这里观察到我们成功向文件中写入和向文件中读取数据。
最后
经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:xhs1999xhs (备注Java)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-OwwKhcF8-1713696143558)]
[外链图片转存中…(img-1WMtRIpq-1713696143559)]
[外链图片转存中…(img-DImVuZBo-1713696143559)]
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:xhs1999xhs (备注Java)
[外链图片转存中…(img-5F670DUk-1713696143560)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!