您的位置:首页 > 编程语言 > Java开发

java学习之路 之 IO流-练习题

2016-08-25 21:56 435 查看
package com.atguigu.javae.io;

import java.io.FileReader;
import java.io.IOException;

import org.junit.Test;

public class IOTest {

@Test
public void testReader() {
// 1) 声明流对象引用,并赋值为null;
FileReader fReader = null;
// 2) try catch finally
try {
// 5) 创建流对象, 建立通道
fReader = new FileReader("一个文本文件"); // 尝试从当前目录下开始找这个文件
// 6) 通过流对象,处理数据
int ch = fReader.read();
while (ch != -1) {
// 1) 处理已经读到的数据
System.out.print((char)ch); // 如果包含换行, 也能正确处理
// 2) 继续读后面的数据, 直到-1为止
ch = fReader.read();
}
} catch (Exception e) {
// 4) 处理异常
e.printStackTrace();
} finally {
// 3) 关闭流对象
if (fReader != null) {
try {
fReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

class FileCopy {
// 使用文件流完成文件的复制,每一次读取一个字节
@Test
public void test() {

FileReader fr = null;
FileWriter fw = null;

try {
fr = new FileReader("./src/com/atguigu/javase/io/Filecopy.java");
fw = new FileWriter("Filecopy.java.bak");

int ch = fr.read();
while (ch != -1) {
fw.write(ch);
ch = fr.read();
}

} catch (Exception e) {
e.printStackTrace();
} finally {
if (fr != null) {
try {
fr.close();
} catch (Exception e2) {
}
}
if (fw != null) {
try {
fw.close();
} catch (Exception e2) {
}
}
}
}
}

class IOTest {
// 使用问件输入流 读取文件内容,并给没行前加上行号,然后在控制台打印输出,
public static void main(String[] args) {
FileReader fr = null;

try {
fr = new FileReader("./src/com/atguigu/javase/io/IOTest.java");
char[] buf = new char[100];
int ch = fr.read(buf);
System.out.println(buf);
int count = 1;
System.out.print(count++ + " ");
while (ch != -1) {
for (int i = 0; i < ch; i++) {
System.out.print(buf[i]);
if (buf[i] == '\n') {
System.out.print(count++ + " ");
}
}
ch = fr.read(buf);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fr != null) {
try {
fr.close();
} catch (Exception e2) {
}
}
}
}
}

class TestCopy {

public static void main(String[] args) {
FileReader fReader = null;
FileWriter fWriter = null;
// 使用文件流完成文件的复制,每一次读取100个字节
try {
fReader = new FileReader("./src/com/atguigu/javase/io/TestCopy.java");
fWriter = new FileWriter("TestCopy.java.bak");

char[] buf = new char[100];
int realCount = fReader.read(buf);

while(realCount != -1) {
fWriter.write(buf, 0, realCount);
realCount = fReader.read(buf);
}

} catch (Exception e) {
e.printStackTrace();
} finally {
if (fReader != null) {
try {
fReader.close();
} catch (Exception e2) {
}
}
if (fWriter != null) {
try {
fWriter.close();
} catch (Exception e) {
}
}
}
}
}

class TestFileCopy2 {
// 使用缓冲流完成文件的复制
public static void main(String[] args) {
FileReader fReader = null;
BufferedReader bReader = null;
FileWriter fWriter = null;
BufferedWriter bWriter = null;

try {
fReader = new FileReader("./src/com/atguigu/javase/io/TestCopy.java");
bReader = new BufferedReader(fReader);
fWriter = new FileWriter("TestFileCopy2.java.bak2");
bWriter = new BufferedWriter(fWriter);

String line = bReader.readLine();
while (line != null) {

bWriter.write(line);
bWriter.newLine();
line = bReader.readLine();
}

} catch (Exception e) {
e.printStackTrace();
} finally {
if (bReader != null) {
try {
bReader.close();
} catch (Exception e2) {
}
}
if (bWriter != null) {
try {
bWriter.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}
}

package com.atguigu.javase.io;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Set;
import java.util.TreeSet;

import org.junit.Test;

public class Work {

@Test
public void work6() {
//把xmlstudy文件中的内容的重复的行去掉, 并对行进行从小到大排序后 写入新文件xmlstudy2中, 验证文件中有没有去掉空行,并且排序
FileReader fileReader = null;
BufferedReader bufferedReader = null;
FileWriter fileWriter = null;
BufferedWriter bufferedWriter = null;
try {
fileReader = new FileReader(new File("xmlstudy"));
bufferedReader = new BufferedReader(fileReader);
fileWriter = new FileWriter(new File("xmlstudy2"));
bufferedWriter = new BufferedWriter(fileWriter);

Set<String> set = new TreeSet<String>();
String line = null;
while ((line = bufferedReader.readLine()) != null) {
set.add(line);
}
for (String string : set) {
bufferedWriter.write(string);
bufferedWriter.newLine();
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
bufferedReader.close();
} catch (Exception e2) {
// TODO: handle exception
}
try {
bufferedWriter.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}

@Test
public void work1() {
// 使用Object输入输出流,写入50个100以内的随机整数, 再读出来打印输出
FileOutputStream fos = null;
BufferedOutputStream bos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream("50个随机数");
bos = new BufferedOutputStream(fos);
oos = new ObjectOutputStream(bos);
for (int i = 0; i < 50; i++) {
oos.writeInt((int)(Math.random() * 100));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
oos.close();
} catch (Exception e2) {
}
}
}

@Test
public void work2() {
FileInputStream fis = null;
BufferedInputStream bis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream("50个随机数");
bis = new BufferedInputStream(fis);
ois = new ObjectInputStream(bis);
for (int i = 0; i < 50; i++) {
System.out.println(ois.readInt());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
ois.close();
} catch (Exception e2) {
}
}
}

//扩展 写入随机个100以内的随机整数, 再全部读出来打印输出
@Test
public void work3() {
// 使用Object输入输出流,写入50个100以内的随机整数, 再读出来打印输出
FileOutputStream fos = null;
BufferedOutputStream bos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream("随机个随机数");
bos = new BufferedOutputStream(fos);
oos = new ObjectOutputStream(bos);
int rand = (int)(Math.random() * 50);
oos.writeInt(rand);
for (int i = 0; i < rand; i++) {
oos.writeInt((int)(Math.random() * 100));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
oos.close();
} catch (Exception e2) {
}
}
}

@Test
public void work4() {
FileInputStream fis = null;
BufferedInputStream bis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream("随机个随机数");
bis = new BufferedInputStream(fis);
ois = new ObjectInputStream(bis);
int count = ois.readInt();
for (int i = 0; i < count; i++) {
System.out.println(ois.readInt());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
ois.close();
} catch (Exception e2) {
}
}
}
}

package com.atgiugu.javase.io;

import java.io.FileReader;
import java.io.FileWriter;

public class FileCopy {

public static void main(String[] args) {
// 把FileCopy.java复制成FileCopy.java.bak
FileReader fReader = null;
FileWriter fWriter = null;
try {
fReader = new FileReader("./src/com/atgiugu/javase/io/FileCopy.java");
fWriter = new FileWriter("FileCopy.java.bak");
int ch = fReader.read();
while (ch != -1) {
// 1) 处理已经读到的数据
fWriter.write(ch);
// 2) 继续读后面的数据,直到-1
ch = fReader.read();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fReader != null) {
try {
fReader.close();
} catch (Exception e2) {
}
}

if (fWriter != null) {
try {
fWriter.close();
} catch (Exception e2) {
}
}
}
}
}

package com.atgiugu.javase.io;

import java.io.FileReader;
import java.io.FileWriter;

public class TextFileCopy {

public static void main(String[] args) {
//编写程序TextFileCopy.java,在测试方法中,将TextFileCopy.java复制为TextFileCopy.java.bak文件;
FileReader fReader = null;
FileWriter fWriter = null;
try {
//fReader = new FileReader("真的爱你.mp3"); 不可以处理二进制文件
//fWriter = new FileWriter("真的不爱你.mp3");
fReader = new FileReader("TextFileCopy.java");
fWriter = new FileWriter("TextFileCopy.java.bak");
char[] buf = new char[100];
int realCount = fReader.read(buf);
while (realCount != -1) {
// 1) 处理已经读到的数据
fWriter.write(buf, 0, realCount);
// 2) 继续读后面的数据
realCount = fReader.read(buf);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fReader != null) {
try {
fReader.close();
} catch (Exception e2) {
}
}
if (fWriter != null) {
try {
fWriter.close();
} catch (Exception e2) {
}
}
}
}
}

package com.atguigu.javase.work;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

import org.junit.Test;

public class HomeWork {

//请把学生名与考试分数录入到Map中,并按分数显示前三名成绩学员的名字。
@Test
public void work1() {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("小明", 80);
map.put("小花", 70);
map.put("小丽", 60);
map.put("小强", 100);
map.put("小伟", 99);
map.put("小刚1", 100);
map.put("小刚2", 100);
map.put("小刚3", 100);
map.put("小刚4", 100);
map.put("小刚5", 100);

Set<String> nameSet = map.keySet();
String[] nameArr = nameSet.toArray(new String[0]);
for (int i = 0; i < nameArr.length - 1; i++) {
for (int j = 0; j < nameArr.length - 1 - i; j++) {
if (map.get(nameArr[j]) > map.get(nameArr[j + 1])) {
String tmp = nameArr[j];
nameArr[j] = nameArr[j + 1];
nameArr[j + 1] = tmp;
}
}
}
Set<Integer> high3 = new TreeSet<Integer>();
for (int i = nameArr.length - 1; i >= 0 ; i--) {
if (high3.size() == 3) {
break;
}
high3.add(map.get(nameArr[i]));
}
List<Integer> high3List = new ArrayList<Integer>();
high3List.addAll(high3);
int no1count = 0;
int no2count = 0;
for (int i = nameArr.length - 1; i >= 0 ; i--) {
if (map.get(nameArr[i]) == high3List.get(2)) {
System.out.println(nameArr[i] + " : " + high3List.get(2));
no1count++; // 最高分个数++
} else if (map.get(nameArr[i]) == high3List.get(1)) {
if (no1count >= 3) { // 如果是最高分个数已经大于3 中断第二高分的同学的打印
break;
}
System.out.println(nameArr[i] + " : " + high3List.get(1));
no2count++; // 第二高分计数
} else if (map.get(nameArr[i]) == high3List.get(0)) {
if (no1count + no2count >= 3) {
break;
}
System.out.println(nameArr[i] + " : " + high3List.get(0));
}
}
//System.out.println(nameArr[nameArr.length - 1] + " : " + map.get(nameArr[nameArr.length - 1]));
//System.out.println(nameArr[nameArr.length - 2] + " : " + map.get(nameArr[nameArr.length - 2]));
//System.out.println(nameArr[nameArr.length - 3] + " : " + map.get(nameArr[nameArr.length - 3]));
}

@Test
public void work2() {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("小明", 80);
map.put("小花", 70);
map.put("小丽", 60);
map.put("小强", 100);
map.put("小伟", 99); // 99小伟
map.put("小刚", 100);// 100小刚

List<String> list = new ArrayList<String>();
Set<String> name = map.keySet();
for (String n : name) {
int score = map.get(n);
list.add((char)score + n);
}
Collections.sort(list);
Collections.reverse(list);
System.out.println((int)list.get(0).charAt(0) + " : " + list.get(0).substring(1));
System.out.println((int)list.get(1).charAt(0) + " : " + list.get(1).substring(1));
System.out.println((int)list.get(2).charAt(0) + " : " + list.get(2).substring(1));
}
}

package com.guigu.javase.Object;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.RandomAccessFile;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import org.junit.Test;

@SuppressWarnings("serial")
class Student implements Serializable{

private int id;
private String name;
private double score;

public Student() {
}

public Student(int id, String name, double score) {
super();
this.id = id;
this.name = name;
this.score = score;
}

@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", score=" + score
+ "]";
}
}

public class IOTest {
// 使用对象流将,存有3个学生对象的Set集合对象,写如文件“对象序列化文件”
@Test
public void test1() {
FileOutputStream fos = null;
ObjectOutputStream oos = null;

try {
fos = new FileOutputStream("对象序列化文件");
oos = new ObjectOutputStream(fos);

Student s1 = new Student(1, "小明", 90);
Student s2 = new Student(2, "小红", 89);
Student s3 = new Student(3, "小丽", 98);

Set<Student> set = new HashSet<Student>();
set.add(s1);
set.add(s2);
set.add(s3);

oos.writeObject(set);

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
oos.close();
} catch (Exception e2) {
}
}
}

// 将上述文件内的对象读取出来并在控制台打印输出
@Test
public void test2() {
FileInputStream fis = null;
ObjectInputStream ois = null;

try {
fis = new FileInputStream("对象序列化文件");
ois = new ObjectInputStream(fis);

@SuppressWarnings("unchecked")
Set<Student> set = (Set<Student>)ois.readObject();
Iterator<Student> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
ois.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}

// 使用转换流将几个字符串以UTF8编码写入“转换流写文件”文件中
@Test
public void test3() {
FileOutputStream fis = null;
OutputStreamWriter osw = null;

try {
fis = new FileOutputStream("转换流写文件");
osw = new OutputStreamWriter(fis,"UTF8");

osw.write("abdcssd\n");
osw.write("你管我写什么?");
osw.write(10);
osw.write("哈哈哈!!");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
osw.close();
} catch (Exception e2) {
}
}
}

// 使用转换流将“转换流写文件”中的字符串按照UTF8格式读出来并在控制台上打印输出
@Test
public void test4() {
FileInputStream fis = null;
InputStreamReader isr = null;

try {
fis = new FileInputStream("转换流写文件");
isr = new InputStreamReader(fis,"UTF8");

int count = isr.read();
while (count != -1) {

System.out.print((char)count);
count = isr.read();
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
isr.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}

获取键盘输入的字符串,并在控制台打印输出,若不是数字则提示
@Test
public void test5() {
InputStreamReader isr = null;
BufferedReader brReader = null;
FileWriter fw = null;
BufferedWriter brWriter = null;
try {
isr = new InputStreamReader(System.in); //转换流获取键盘输入的字符串
brReader = new BufferedReader(isr); // 缓冲流
fw = new FileWriter("nums.txt");  // 文件输出流
brWriter = new BufferedWriter(fw); // 缓冲流

for (int i = 0; i < 10;i++) {
String num = brReader.readLine();
try {
Double.parseDouble(num);
brWriter.write(num);
brWriter.newLine();
} catch (NumberFormatException e) {
System.out.println("输入数字错误!!");
i--;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
brReader.close();
} catch (Exception e2) {
}
try {
brWriter.close();
} catch (Exception e2) {
}
}
}

// 随机访问文件类练习
@Test
public void test6() {
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile("随机访问文件", "rw");
for (int i = 0; i < 26; i++) {
raf.write('a' + i);
}
raf.seek(0);
for (int i = 0; i < 10; i++) {
raf.write('A' + i);
}
raf.seek(raf.length() - 10);
for (int i = 0; i < 10; i++) {
raf.write('0' + i);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
raf.close();
} catch (Exception e2) {
}
}
}

// File类的练习
@Test
public void test7() {
File file = new File(".");
File file1 = new File("xxx");

String[] childFileName = file.list();
for (int i = 0; i < childFileName.length; i++) {
System.out.println(childFileName[i]);
}

file1.mkdir();
File file2 = new File("xxx/file.info");
FileWriter fWriter = null;
try {
fWriter = new FileWriter(file2);
File[] childFiles = file.listFiles();
for (int i = 0; i < childFiles.length; i++) {
fWriter.write(childFiles[i].getName() + ",");;
fWriter.write(childFiles[i].length() + "\n");;
System.out.print(childFiles[i].getAbsolutePath());
System.out.println(childFiles[i].length());
}
} catch (Exception e) {
// TODO: handle exception
} finally {
try {
fWriter.close();
} catch (Exception e2) {
// TODO: handle exception
}
}

}
}

package com.atguigu.javase.io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.RandomAccessFile;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import org.junit.Test;

class Person implements Serializable {

private static final long serialVersionUID = -402328197027L;

public static int no = 100; // 静态属性不可以被序列化

private String name;
private transient int age; // transient是短暂的,瞬时的. 这个属性也不能被序列化
private String gender;
//private double weight;

public Person() {
}

public Person(String name, int age, String gender) {
super();
this.name = name;
this.age = age;
this.gender = gender;
}

@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", gender=" + gender
+ "]";
}

}

/**
* 写一个Student类 ,包含属性 id, name, score
* 序列化一个包含3个对象的数组, 再序列化一个包含4个对象的List集合
* 再反序列化,打印输出
*/
public class IOTest {

@Test
public void exer5() {
// 创建目录xxx
File file = new File("xxx");
file.mkdir();
// 列出当前目录下的所有子文件和子目录, 把文件的文件名和文件长度信息写入文件xxx/file.info中
File currentDir = new File(".");
File[] childFiles = currentDir.listFiles();
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter("xxx/file.info");
for (int i = 0; i < childFiles.length; i++) {
System.out.println(childFiles[i]);
fileWriter.write(childFiles[i].getName() + "," + childFiles[i].length());
fileWriter.write(10);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
fileWriter.close();
} catch (Exception e2) {
// TODO: handle exception
}
}

}

@Test
public void testFile2() throws IOException {
File file = new File("abc");
System.out.println("file.mkdir():" + file.mkdir());
System.out.println("file.canRead():" + file.canRead());
System.out.println("file.getAbsolutePath():" + file.getAbsolutePath());
System.out.println("file.getFreeSpace():" + file.getFreeSpace());
System.out.println("file.getTotalSpace():" + file.getTotalSpace());
System.out.println("file.lastModified():" + file.lastModified());
System.out.println("file.length():" + file.length());
System.out.println("file.canWrite():" + file.canWrite());
System.out.println("file.createNewFile():" + file.createNewFile());
System.out.println("file.exists():" + file.exists());
System.out.println("file.isDirectory():" + file.isDirectory());
System.out.println("file.isFile():" + file.isFile());
// 目录特有的方法
System.out.println("------------------------");
String[] childFileNames = file.list();
for (int i = 0; i < childFileNames.length; i++) {
System.out.println(childFileNames[i]);
}
System.out.println("------------------------");
// 重点方法
File[] childFiles = file.listFiles();
for (int i = 0; i < childFiles.length; i++) {
System.out.println(childFiles[i].length() + " " + childFiles[i].getAbsolutePath());
}

}
@Test
public void testFile() throws IOException {
File file = new File("nums.txt");
System.out.println("file.canRead():" + file.canRead());
System.out.println("file.getAbsolutePath():" + file.getAbsolutePath());
System.out.println("file.getFreeSpace():" + file.getFreeSpace());
System.out.println("file.getTotalSpace():" + file.getTotalSpace());
System.out.println("file.lastModified():" + file.lastModified());
System.out.println("file.length():" + file.length());
System.out.println("file.canWrite():" + file.canWrite());
System.out.println("file.createNewFile():" + file.createNewFile());
System.out.println("file.exists():" + file.exists());
System.out.println("file.isDirectory():" + file.isDirectory());
System.out.println("file.isFile():" + file.isFile());
//System.out.println("file.delete():" + file.delete());
}

// 写一个文件, 写入26个小写字母
@Test
public void exer3() {
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile("随机文件2", "rw");
for (int i = 0; i < 26; i++) {
raf.write('a' + i); // 0x00000061
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
raf.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// 再打开这个文件, 把前10个换成大写字母,后10个替换为数字字符
@Test
public void exer4() {
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile("随机文件2", "rw");
//abcdefghijklmn...xyz
raf.seek(0);
for (int i = 0; i < 10; i++) {
raf.write('A' + i);
}
raf.seek(raf.length() - 10);
for (int i = 0; i < 10; i++) {
raf.write('0' + i);
}
//raf.setLength(1024 * 1024 * 1024);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
raf.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Test
public void testRandomAccessFile() {
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile("随机访问文件", "rw"); // 以读写方式打开文件, 指针指向0下标处
char ch = (char)raf.read(); // 读一个字节, 一个字节正好是一个英语字符, 指针要作相应的移动
System.out.println(ch);
//raf.readChar();
System.out.println("pointer:" + raf.getFilePointer());

raf.seek(4);
byte[] buf = new byte[8192];
int realCount = raf.read(buf, 0, 4); // 只读4个字节
String string = new String(buf, 0, realCount);
System.out.println(string);

raf.seek(20);
realCount = raf.read(buf, 0, 3); // 只读3个字节
String string2 = new String(buf, 0, realCount);
System.out.println(string2);

raf.seek(8);
raf.writeUTF("XXXX");
//raf.write('a'); 把一个字符当作字节写入文件

// 打开文件,确认内容
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
raf.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}

@Test
public void testSystemOut2() throws FileNotFoundException {
System.out.println("aaaaa");
System.err.println("bbbbb"); // System.err对象中的方法是在另外一个线程中运行
}

@Test
public void testSystemOut() throws FileNotFoundException {
//System.setOut(new PrintStream(new FileOutputStream("sysout"))); // 输入输出重定向
//System.out.println("abcdefg");

System.setErr(new PrintStream(new FileOutputStream("syserr"))); //把错误输出重定向到文件
System.err.println("xxxxxxxxx");
try {
String string = null;
System.out.println(string.length());
} catch (Exception e) {
e.printStackTrace();
}
}

// 从键盘获取10组数字, 把这10个数字保存在文件nums.txt中.
@Test
public void exer1() {
// 如果获取到的输入不是数字,则不允许写入文件.
InputStreamReader isr = null;
BufferedReader bufferedReader = null;
FileWriter fileWriter = null;
BufferedWriter bufWriter = null;
try {
isr = new InputStreamReader(System.in);
bufferedReader = new BufferedReader(isr);
fileWriter = new FileWriter("nums.txt", true); // 以追加的方式写文件
bufWriter = new BufferedWriter(fileWriter);

for (int i = 0; i < 10; i++) {
String str = bufferedReader.readLine();
try {
Double.parseDouble(str);
bufWriter.write(str);
bufWriter.newLine();
} catch (NumberFormatException e) {
System.out.println("输入的数字有误!!");
i--;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bufferedReader.close();
} catch (Exception e2) {
// TODO: handle exception
}
try {
bufWriter.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}

// 使用转换流获取键盘输入的字符串并在控制台打印输出
@Test
public void testSystemIn() {
//System.out.println(System.in);
InputStreamReader isr = null;
BufferedReader bufReader = null;
try {
isr = new InputStreamReader(System.in); // System.in是一个常量对象, 由JVM自动创建, 我们只需要拿来使用即可
bufReader = new BufferedReader(isr);
String line = bufReader.readLine();
while (line != null) {
// 1)
System.out.println(line);
// 2)
line = bufReader.readLine(); // ctrl+z会使得返回null
}

} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
bufReader.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}

@Test
public void testOutputStreamWriter() {
FileOutputStream fos = null;
OutputStreamWriter osw = null;
try {
fos = new FileOutputStream("使用转换流写文本文件3", true);
//osw = new OutputStreamWriter(fos); // 以本地编码方式写文本文件
osw = new OutputStreamWriter(fos, "UTF8"); // 以指定编码方式写文本文件
osw.write("来一个字符串");
osw.write(10);
osw.write("abcdefgh\n");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
osw.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
// 写一个文本文件,使用UTF8编码方式, 用记事本打开查看内容
// 再读取文件内容并打印输出
// 试一下使用ISO8859-1编码方式,写文件并读文件
@Test
public void testInputStreamReader() {
//FileReader fReader = null;
FileInputStream fis = null;
InputStreamReader isr = null;
BufferedReader bufReader = null;
try {
//fReader = new FileReader("utf8编码的文本文件.txt"); // 只能使用默认的GBK方式读文本文件
fis = new FileInputStream("使用转换流写文本文件2");
//isr = new InputStreamReader(fis); // 默认按照GBK方式把字节流转换为字符流
isr = new InputStreamReader(fis, "UTF8"); // 以UTF8编码方式把字节流转化为字符流
bufReader = new BufferedReader(isr);
String line = bufReader.readLine(); // 直接从流中读一行字符串, line中不包含任何换行
while (line != null) {
// 1) 处理数据
System.out.println(line);
// 2) 继续读
line = bufReader.readLine();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭流, 只需要关闭高级流即可
if (bufReader != null) {
try {
bufReader.close();
} catch (Exception e2) {
}
}
}
}

// 处理对象, 对象序列化 : 把在GC区中对象的相关数据保存到输出流中.
// 可以直接序列化类实现了Seriliable接口的对象, 还可以序列化对象数组, 对象集合
// 序列化和序列化时类的版本要求一致.
@Test
public void testSerialize() {
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream("对象序列化文件");
oos = new ObjectOutputStream(fos);
// 对象序列化
Person.no = 1000;
Person obj1 = new Person("张三", 30 , "男");
Person obj2 = new Person("李四", 40 , "女");
Person obj3 = new Person("王五", 50 , "男");

Person[] arr = {obj1, obj2, obj3};

/*
oos.writeObject(obj1);
oos.writeObject(obj2);
oos.writeObject(obj3);
*/

//oos.writeObject(arr);

Set<Person> set = new HashSet<Person>();
set.add(obj1);
set.add(obj2);
set.add(obj3);

oos.writeObject(set);

} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
oos.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}

// 对象反序列化 : 把输入流中二进制数据还原成对象的过程
@Test
public void testDeSerialize() {
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream("对象序列化文件");
ois = new ObjectInputStream(fis);
/*
Person person1 = (Person)ois.readObject();
System.out.println(person1);
Person person2 = (Person)ois.readObject();
System.out.println(person2);
Person person3 = (Person)ois.readObject();
System.out.println(person3);
*/

/*
Person[] arr = (Person[])ois.readObject();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
*/
Set<Person> set = (Set<Person>)ois.readObject();
Iterator<Person> iterator= set.iterator();
while (iterator.hasNext()) {
Person person = iterator.next();
System.out.println(person);
}
System.out.println(Person.no);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
ois.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}

package com.atguigu.javase.work;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

import org.junit.Test;
// 从键盘读取一个字符串,判断是整数,还是浮点数,或者是字符串,然后在控制台上打印输出
public class HomeWork {

@Test
public void test3() {
Scanner scanner = null;
try {
scanner = new Scanner(System.in);
/*
while (scanner.hasNextLine()) {
String string = scanner.nextLine();
System.out.println(string);
}*/
// aaa 111 222.3 bbb ccc 999
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
int num = scanner.nextInt();
System.out.println("整数:" + num);
} else if (scanner.hasNextDouble()) {
double value = scanner.nextDouble();
System.out.println("浮点数:" + value);
} else {
String string = scanner.next();
System.out.println("普通字符串:" + string);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
scanner.close();
}
}

// 从键盘读取字符串并在控制太打印输出
@Test
public void test2() throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String line = bufferedReader.readLine();
while (line != null) {
System.out.println(line);
line = bufferedReader.readLine();
}
bufferedReader.close(); // 键盘流一旦关闭,就无法再使用
}

@Test
public void work1() {
String path = "c:/MyWork";
File file = new File(path);
deleteFile(file);
}

// 删除文件夹及其子目录及子文件夹
public void deleteFile(File file) {
if (file.isFile()) {
file.delete();
} else {
File[] childFiles = file.listFiles();
for (int j = 0; j < childFiles.length; j++) {
deleteFile(childFiles[j]);
}
file.delete();
System.out.println(file + " 目录删除成功!");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: