目录
在做Lab1时遇到了一些Java基本操作的问题,现在记录下来,以备以后查阅。
在做Lab1时遇到了一些Java基本操作的问题,现在记录下来,以备以后查阅。
1.文件读取
文件读取大体上分为两种方式,一种是按照字节读取文件,一种是按照字符读取文件。
按照字节读取的文件,除非内容是单字节的,否则读取出来的内容不是直观的,这中读取方式适合读取图像文件,视频文件等。
按照字符读取文件要求读取出来的内容是直观的,这种读取方式适合读取文本文件等。
1.1使用缓冲流+字符流+文件字节流读取(读字符)
FileInputStream按照字节读取文件
InputStreamReader将字节内容转换成字符
BufferedReader提高了读取的效率
这种方式适合读取文本文件等内容直观的文件
public void read(String filename) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(filename)));
String line = null;
while((line=in.readLine())!=null)
{
System.out.println(line);
}
in.close();
}
1.2使用缓冲流+文件字符流读取(读字符)
FileReader是文件字符流,按照字符读取文件;
BufferedReader提高了文件读取的效率
这种方式适合读取文本文件等内容直观的文件
public void read(String filename) throws IOException {
BufferedReader in = new BufferedReader(new FileReader(filename));
String line = null;
while((line=in.readLine())!=null)
{
System.out.println(line);
}
in.close();
}
1.3使用缓冲流+文件字节流读取文件(读字节)
FileInputStream按照字节读取文件
BufferedInputStream带缓冲的输入流,提高读取效率
public void read(String filename) throws IOException {
BufferedInputStream in = new BufferedInputStream(new FileInputStream(filename));
int i;
while ((i = in.read()) != -1) {
System.out.print(i);
}
in.close();
}
1.4直接使用文件字节流读取文件(读字节)
public static void read(String filename) throws IOException {
File file = new File(filename);
InputStream in = null;
in = new FileInputStream(file);
int tempbyte;
while ((tempbyte = in.read()) != -1) {
System.out.write(tempbyte);
}
in.close();
}
2.JAVA变量
参考:Java 变量类型 | 菜鸟教程 (runoob.com)
Java变量共有三种类型:
- 类变量:独立于方法之外的变量,用 static 修饰。
- 实例变量:独立于方法之外的变量,不过没有 static 修饰。
- 局部变量:类的方法中的变量。
2.1局部变量
- 局部变量声明在方法、构造方法或者语句块中;
- 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
- 访问修饰符不能用于局部变量;
- 局部变量只在声明它的方法、构造方法或者语句块中可见;
- 局部变量是在栈上分配的。
- 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
2.2实例变量
- 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
- 当一个对象被实例化之后,每个实例变量的值就跟着确定;
- 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
- 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
- 实例变量可以声明在使用前或者使用后;
- 访问修饰符可以修饰实例变量;
- 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
- 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
- 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。
2.3类变量
- 类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。
- 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
- 静态变量除了被声明为常量外很少使用,静态变量是指声明为 public/private,final 和 static 类型的变量。静态变量初始化后不可改变。
- 静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量。
- 静态变量在第一次被访问时创建,在程序结束时销毁。
- 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为 public 类型。
- 默认值和实例变量相似。数值型变量默认值是 0,布尔型默认值是 false,引用类型默认值是 null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
- 静态变量可以通过:ClassName.VariableName的方式访问。
- 类变量被声明为 public static final 类型时,类变量名称一般建议使用大写字母。如果静态变量不是 public 和 final 类型,其命名方式与实例变量以及局部变量的命名方式一致。
3.正则表达式
在实验中遇到了怎样判别txt文件中的数字不是通过制表符‘\t'分隔开的。数字不是制表符分隔开,则其分隔符类型不知道,直接查找文本中的内容,寻找制表符之外的分隔符显然很难实现。所以想到了Java语言的正则表达式,对字符串的内容进行模式匹配,来判断文本中是否有除了制表符之外的其他分隔符。
String rxp = "[^0123456789.-]";
Pattern r = Pattern.compile(rxp);
...
Matcher m = r.matcher(nums[i]);
if (m.find() == true) {
System.out.println("矩阵元素不是用制表符分隔开!");
return false;
}
这里使用了正则表达式[^0123456789.-],这是表示匹配0-9.-之外的符号,如果匹配到其他符号,则说明分隔符不仅仅是制表符,还有其他的符号。
正则表达式的用法参考:Java 正则表达式 | 菜鸟教程 (runoob.com)