发表于: 2020-05-26 21:43:26
1 1159
今日作为:按照任务要求创建表结构,ID long类型 自增,设为主键,设为索引,create_at创建时间和update_at修改时间系统自动填写
设置姓名为索引
按照任务的需要设置了合理数值类型,添加一条报名表,添加10条报名表,删除表,然后导入还原。
使用sql语句还原增删改查(忘了截图了。。。。。。。)
复习还有一点内容,这是今天的笔记:
I/O操作的重要性
绝大多数的应用程序,都由三大逻辑块构成:
1.输入数据(Input)
2.计算数据(Compute)
3.输出数据(Output)
在Java总,I/O机制都是基于数据流方式进行输入输出,这些数据流可视为流动数据序列
Java把这些不同来源和目标的数据,统一抽象为数据流
当Java需要程序读取数据时,就会开启一个通向数据源的流,这个数据源可以是文件、内存,也可以是网络连接
当Java程序需要写入数据时,也会开启一个通向目的地的流
流为操作各种物理设备提供了一致的接口
通过打开操作将流关联到文件,通过关闭操作将流和文件解除关联
I/O流的优势在于简单易用,缺点是效率较低
在Java类库中,有关I/O操作的内容非常庞大:
标准输入/输出
文件的操作
网络上的数据流
字符串流
对象流
File文件类
在java.io包这个大家族中,大多数类都是针对数据实施流式操作的,但是File类是个例外,它仅仅用于处理文件和文件系统,是唯一一个于文件本身有关的操作类,他没有指定数据怎样从文件读取或如何把数据存贮到文件中,它仅仅描述了文件本身的属性
File类除了对文件操作外,还可以将目录当做文件进行处理——Java中的目录当成File对象对待
要想使用File类进行操作,就必须设置一个操作文件的路径
File ( String directoryPath ) //创建指定文件或目录路径的File对象
File ( String directoryPath , String filename )
//创建由File对象和指定文件的File对象
File (File dirObj , String filename )
//创建指定文件目录路径和文件名的File对象
directoryPath 表示文件的路径名
filename 表示文件名
dirObj 表示一个指定目录的File对象
分隔符
Windows / ( \\ )
Linux / UNIX /
File类中定义了很多获取File对象标准属性的方法,例如:
getName ( ) 用于返回文件名 getParent ( ) 返回父目录名
exists ( ) 在文件存在的情况下返回true,反之返回false
File类的方法是不对称的
1.文件的基本操作存在延迟
2.为了让Java程序具备可移植性,就必须考虑分隔符的问题
File类中提供了一个常量public static final String separator
File file = new File( “c:” + File . separator + “1 . txt” ) ;
//要定义的操作文件路径
只要遇见路径分隔符的问题,都可以用separator常量来解决,separator
会自动根据当前运行的系统,确定使用何种分隔符
文本文件的操作
在java中,读取文本的方便的机制,莫过于使用Scanner来完成
首先需要一个文件名,来构造一个File文件对象
File inputFile = new File( “ input . txt” ) ;
然后将这个文本文件当做参数,构建Scanner对象
Scanner in = new Scanner ( inputFile ) ;
于是,Scanner对象就可以把文件作为数据输入源,然后就可以使用Scanner的方法( nextlnt( )、nextDouble( )、next( )等方法 )
如果我们想读入input.txt中所有的浮点数,就可以使用如下模式
while ( in.hasNextDouble() ) //如果还有下一个double类型的值
{
double value =in.nextDouble(); //读入这个值
//处理这个数值
}
而对于将数据输入到一个文件中,有很多方法,其中使用PrintWriter类较为常见
PrintWriter out = new PrintWriter( “output.txt” ) ;
output.txt是输出文件的名称,如果这个文件已经存在,则会清空文件内容,再写入新内容,如果不存在,则穿件一个名为ouput.txt的文件
PrintWriter是PrintStream的一个功能增强类,而PrintStream类其实不陌生,System.out和System.in都是这个类的对象
print、println、printf等方法都试用与PrintWriter的对象
out.println( “Hello Java!” ) ;
out.printf( “value:%6.2f\n” , value ) ;
当我们处理完毕数据的输入和输出是,一定要关闭这两个对象,以免他们继续占据系统资源
in.close( ) ;
out.close( ) ;
还需要注意的是,PrintWriter类的输出对象out,可以直接用文件名来构建
EX: PrintWriter out = new PrintWriter( “out.xtxt” ) ;
但是用Scanner类构建的输入对象in,则必须用文件File类的对象构建
EX: Scanner in = new Scanner( “input.txt” ) ; //语义错误
为了读取用空格隔开的字符串(文本单词),比较简单的方法就是使用Scanner的next( )方法,他可以用来读取下一个字符串,在用这个方法前,建议用hasNext( )判断一下是否还有下一个可读取的字符串,以免抛出异常
分隔符方法useDelimiter( )默认以空格作为分隔符,可以使用正则表达式
当我们需要知道某个字符串的某个字符是哪一类字符时,可以使用Character类中的一些静态方法
Character.isDigit (ch) //判断ch是否为数字0~9中的一个
isDigit ( char ) 判断指定的char值是否为数字
true 0,1,2....9
isLetter ( char) 判断指定的char值是否为字母
true A,B,C,a,b,c
isUpperCase ( char ) 判断指定的char值是否为字母
true A,B,C
isLowerCase ( char ) 判断指定的char值是否为字母
true a,b,c
isWhiteSpace ( char ) 判断指定的char值是否为空白字符
true 空格、Tab和回车
nextLine( )方法可以一次性读取一行的字符串,为了保证每次都能读取一行,建议先用hasNextLine( )提前判断,当还能读取一行或多行字符是会返回true,否则返回false
trim( )方法,可以吧一个字符串的前面或最后面的空白字符剪掉
i
nteger.parselnt( )方法可以分析输入的字符是不是整形,如果是,就转换为对应的整形数值
System类对I/O的支持
为了支持标准输入输出设备,Java定义了三个特殊的流对象常量
错误输出:public static final PrintStream err
系统输出:public static final PrintStream out
系统输出:public static final PrintStream in
System.in通常对应键盘,属于InputStream类型,程序使用System.in可以读取从键盘上的输入的数据
System.out通常对应显示器,属于PrintStream类型,PrintStream是OutputStream的一个子类,程序使用System.out可以将数据输出到显示器上
键盘可以被当做一个特殊的输入流,显示器可以被当做一个特殊的输出流
System.err则是串门用于输出系统错误的对象,它可视为特殊的System.out
按照Java原本的设计,System.err输出的错误是不希望用户看见的,而System.out的输出是希望用户看见的
缓冲流:先把文件从硬盘读取到内存,把它缓存起来,然后再使用一个缓冲流对内存里面的数据进行操作,这样就可以提高文件读写速度
字节流和字符流
1字符数据可以方便诸如中文的双字节编码处理
2在网络传输或数据保存时,数据操作单位都是自己,而不是字符
3字节流和字符流在操作形式上都是类似的
4字节流操作时没有使用到缓冲区,但字符流操作室需要缓冲区,字符流在关闭时默认清空缓冲区,如果没有关闭,可用flush( )方法手工清空缓冲区
在开发之中,尽量使用字节流进行操作,因为字节流可以处理图片、音乐、文字,也可以方便地进行传输或者是文字的编码转换
在处理中文的时候可以考虑字符流
明日的计划:继续复习一下,然后开始准备任务17以及按照验收要求准备做任务
今日疑问:对于I/O这块还不是特别熟练,明天继续做一下书本的习题
评论