输入输出
一.流的分类 1.按方向分为输入流(外部—>程序)和输出流(程序—>外部); 2.按照读取单位分为字节流和字符流; 3.按是否直接与数据源打交道分为节点流和处理流。
调用流对象的读写方法大都需要处理IOException ,该异常是检验异常,需要捕捉或在调用方法后加声明。
二、分为五个需要掌握的方法 1.字节输入流 2.字节输出流 利用一张图片读取二进制数生成一张一摸一样的图片。
public class Main {
public static void main(String[] args) throws Exception{
FileInputStream fis=new FileInputStream("e:/2.jpg");
List<Integer> l1=new ArrayList<>();
while(true)
{
int a=fis.read();
if(a==-1)
break;
l1.add(a);
}
fis.close():
File f=new File("e:/1");
FileOutputStream fos=new FileOutputStream("e:/1.jpg");
for(int x:l1)
fos.write(x);
fos.close();
}
}
3.字符输入流 4.字符输出流 注意点: 1.写数字到文档中时,不要加换行符之类的其他东西,不然也会当成要写入的信息处理。 2.会影响后续对写入数据的处理。
public class Main {
public static void main(String[] args) throws Exception{
FileWriter fw=new FileWriter("e:/1.txt");
List<Integer> l1=new ArrayList<>();
for(int i=0;i<100;i++) {
int tmp=(int)(Math.random()*10);
l1.add(tmp);
}
for(int x:l1)
fw.write(x);
fw.close();
FileReader fr=new FileReader("e:/1.txt");
Map<Integer, Integer> mp=new TreeMap<>();
while(true)
{
int tmp=fr.read();
if(tmp==-1)
break;
if(mp.get(tmp)==null)
mp.put(tmp,1);
else {
mp.put(tmp, mp.get(tmp)+1);
}
}
fr.close();
for(Entry<Integer, Integer> x:mp.entrySet()) {
System.out.print(x.getKey()+"\t"+x.getValue()+"\r\n");
}
fw=new FileWriter("e:/1.txt");
for(Entry<Integer, Integer> x:mp.entrySet()) {
fw.write(x.getKey()+"/t"+x.getValue()+"\r\n");
}
fw.close();
}
}
5.Scanner方式对字符的读取
Scanner sc=new Scanner(new File("e:/1.txt"));
while(sc.hasNextLine())
{
String tmp=sc.nextLine();
System.out.println(tmp+"-------");
}
1、目录、文件操作
(1)在d盘下建立一个目录dir1
File f1=new File("d:/dir1");
f1.mkdir();
(2)在目录dir1下建立文本文件1.txt,并在里面输入内容。
File f2=new File("d:/dir1/1.txt");
f2.createNewFile();
(3)输出1.txt文件的大小及最后修改日期。
System.out.println(f2.length());
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(new Date(f2.lastModified())));
(4)将1.txt重命名为2.txt。
File f3=new File("d:/dir1/2.txt");
f2.renameTo(f3);
(5)将目录dir1删除。
f3.delete();
f1.delete();
图形用户界面
对于添加文本、标签、按钮、设置监听的简单使用,框架如下: 1.将要用到的窗口、面板、标签、文本、按钮在构造函数前就准备好。 2.根据需要装入构造函数。 4.事件源注册监听器,为了处理方便,通常让容器自身作为监听器。 5.监听器类实现监听接口,在相应方法中编写事件处理代码。
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Main {
public static void main(String[] args) {
new Fr();
}
}
class Fr extends JFrame implements ActionListener{
JTextField f1=new JTextField(10);
JTextField f2=new JTextField(10);
JLabel add=new JLabel("+");
JTextField f3=new JTextField(10);
JLabel eq=new JLabel("=");
JButton gen=new JButton("生成随机数");
JButton cal=new JButton("计算");
JPanel p=new JPanel();
JLabel tips=new JLabel();
Fr(){
this.setLayout(new FlowLayout());
this.add(f1);
this.add(add);
this.add(f2);
this.add(eq);
this.add(f3);
this.add(p);
p.add(gen);
p.add(cal);
this.add(tips);
gen.addActionListener(this);
cal.addActionListener(this);
this.setSize(400,250);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand()=="生成随机数") {
int a=(int)(Math.random()*100);
int b=(int)(Math.random()*100);
f1.setText(a+"");
f2.setText(b+"");
}
else if(e.getSource()==cal) {
try {
int a=Integer.parseInt(f1.getText());
int b=Integer.parseInt(f2.getText());
int c=Integer.parseInt(f3.getText());
int ans=a+b;
if(ans==c)
tips.setText("计算正确!");
else {
tips.setText("计算错误!");
}
} catch (Exception e1) {
tips.setText("输入格式错误!");
}
}
}
}
|