文件字符流
因为文件字节输入流和输出流的read和write方法使用字节数组读写数据,即字节为基本单位处理数据,因此不能很好地处理unicode字符,例如一个汉字占两个字节
与FileInputStream
,FileOutputStream
字节流相对应的是FileReader
,FileWriter
字符流,他们分别是Reader和Writer类的子类
构造方法
输入
FileReader(String filename)
//FileReader(File filename)
//
常用方法
int read( )
//返回一个整数(0~65535),如果未读取字符返回 -1int read(char b [ ] )
//如果到达源的末尾返回 -1int read(char b[ ],int off, int len)
//
输出
FileWriter(String filename)
//FileWriter(File filename)
//
常用方法
int write(int n)
//向文件写入一个字符int write(char b [ ] )
//如果到达源的末尾返回 -1int write(char b[ ],int off, int len)
//
最后记得关闭流
close()
加密的例子
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class Example12_6 {
public static void main(String[] args) {
File file = new File("C:\\Users\\Administrator\\Desktop","abc.txt");//创建文件对象
char c [] = "我是一名学生".toCharArray(); //将输入的信息存放到一个数组里
try{
FileWriter fileWriter = new FileWriter(file); //刷新
for (int i = 0; i < c.length ; i++) {
c[i] = (char)(c[i]^'R'); //进行异或运算后再转为char类型
}
fileWriter.write(c);
String s = new String(c);
System.out.println("密文:" + s);
fileWriter.close(); //关闭
}
catch (Exception e){
}
try {
FileReader fileReader = new FileReader(file);
while(fileReader.read(c) != -1 ){
for (int i = 0; i < c.length ; i++) {
c[i] = (char)(c[i]^'R');
}
}
String s = new String(c);
System.out.println("原文:"+ s);
fileReader.close(); //关闭
}
catch (Exception e){
}
}
}
运行结果
D:\HelloWorld\out\production\HelloJava Chapter_12.Part_3.Example12_6
密文:扃晽乒呟嬴畍
原文:我是一名学生
进程已结束,退出代码 0
缓冲流
BuffererdReader类和BufferedWriter类创建的对象成为缓冲输入流,缓冲输出流
简单来说缓冲流的出现是未了拥有更强的读写能力
缓冲输入流构造方法
BufferedReader(Reader in)
//
FileReader inOne = new FileReader("abc.txt");
BufferedReader inTwo = new BufferedReader(inOne)
然后inTwo可以调用readline()
方法,进行每行读取
String strline = inTwo.readline()//进行每行读取
缓冲输出流构造方法
BufferedWriter(Writer out)
//
FileWriter outOne = new FileWiter(abc.txt)
BufferedWriter outTwo = new BufferedWriter(outOne)
然后outTwo可以调用newline()
方法,进行输出回行
newline()//
BufferedReader和BufferedWriter称为上层流,字符流成为底层流
关闭的时候
输入时.先关低层流
输出流,先关上层流
换行输出的例子
import java.io.*;
public class Example12_7 {
public static void main(String[] args) {
String str[] = {"天气预报","北京多云","上海小雨","广州晴"};
File file = new File("C:\\Users\\Administrator\\Desktop","abc.txt");
try {
FileWriter writer1 = new FileWriter(file);
BufferedWriter writer2 = new BufferedWriter(writer1); //缓冲输出
for (String i : str) { //遍历字符串数组
writer2.write(i);
writer2.newLine(); //缓冲特有的方法,输出换行符
}
writer2.close(); //先关上层流
writer1.close();
FileReader reader1 = new FileReader(file); //对文件进行输入
BufferedReader reader2 = new BufferedReader(reader1);
String s = null; //用于存放每一行的字符串
while ((s = reader2.readLine()) != null) { //当每一有字符时就逐行进行输入,
System.out.println(s);
}
reader1.close(); //先关底层流
reader2.close();
}
catch (Exception e){
}
}
}
运行结果
D:\HelloWorld\out\production\HelloJava Chapter_12.Part_4.Example12_7
天气预报
北京多云
上海小雨
广州晴
使用文件对话框
结合输入输出流使用文件对话框打开和保存文件
留意字体设置和文档类型选择项
具体代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
public class myWindow extends JFrame implements ActionListener {
JFileChooser fileDialog;
JMenuBar jMenuBar;
JMenu jMenu;
JMenuItem jMenuSave,jMenuOpen;
JTextArea jTextArea;
BufferedReader in;
FileReader fileReader;
BufferedWriter out;
FileWriter fileWriter;
myWindow(){
setTitle("文件对话框的实现");
setBounds(300,300,500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
init();
validate();
}
void init(){
jMenuBar = new JMenuBar();
jMenu = new JMenu("菜单");
jMenuSave = new JMenuItem("保存文件");
jMenuSave.addActionListener(this);
jMenuOpen = new JMenuItem("打开文件");
jMenuOpen.addActionListener(this);
jMenu.add(jMenuSave);
jMenu.add(jMenuOpen);
jMenuBar.add(jMenu);
setJMenuBar(jMenuBar);
jTextArea = new JTextArea();
jTextArea.setFont(new Font("",Font.PLAIN,18));
add(new JScrollPane(jTextArea), BorderLayout.CENTER);
fileDialog = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("文档文件","txt");
fileDialog.setFileFilter(filter); //采用文件过滤
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
if (actionEvent.getSource() == jMenuSave){
try{
if (fileDialog.showSaveDialog(this) == JFileChooser.APPROVE_OPTION){
File dir = fileDialog.getCurrentDirectory(); //获取当前路径
String name = fileDialog.getSelectedFile().getName(); //获取所选文件的名称
File file = new File(dir,name);
fileWriter = new FileWriter(file); //
out = new BufferedWriter(fileWriter);
out.write(jTextArea.getText());
out.close();
fileWriter.close();
}
}
catch(Exception e){
}
}
else if(actionEvent.getSource() == jMenuOpen){
try{
if (fileDialog.showOpenDialog(this) == JFileChooser.APPROVE_OPTION){
File dir = fileDialog.getCurrentDirectory(); //获取当前路径
String name = fileDialog.getSelectedFile().getName(); //获取所选文件的名称
File file = new File(dir,name);
fileReader = new FileReader(file);
in = new BufferedReader(fileReader);
String s = null;
while ((s =in.readLine())!= null){
jTextArea.append(s + "\n");
}
fileReader.close();
in.close();
}
}
catch(Exception e){
}
}
}
}
public class Example12_8 {
public static void main(String[] args) {
myWindow myWindow = new myWindow();
}
}
动画和视频
-
动画的基本概念
1.实时动画//采用各种算法来实现运动物体的控制
2.矢量动画//由矢量图衍生出的动画形式
3.二维动画//
4.三维动画//正面,侧面,反面 -
模拟视频//一种传输图像和声音的连续的变动电信号
-
数字信号//和动画一样,由一幅幅帧序列组成的
1.数字视频标准//
2.视频压缩编码// -
视频文件格式
1.Quicktime//Apple公式开发的一种音频,视频文件格式
2.AVI
3.MPEG//运动图象专家组(Moving Picture Experts Group)
4.RM
5.ASF
6.GIF文件//可交换的图像文件(Graphic Interchange Format)
7.Flic文件//
CET4P174
cord
vessel
scholar
regulation
finally
vertical
costly
evident
approval
glimpse
powder
apologize
judgement
veteran