I/O输入和输出
文件的输入和输出是java中很重要的内容,主要是通过数据流来进行,数据流通过获取文件对象,然后对文件进行输入和输出。
1、IO.File测试
public class FileTest {
public static void main(String[] args) {
new FileTest().createFile();
new FileTest().getMessage();
new FileTest().outputStream();
new FileTest().inputStream();
}
public void createFile(){
//创建文件对象
File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt");
//判断是否存在该文件名的文件
if (file.exists()) {
//删除该文件名的文件
file.delete();
System.out.println("文件已经删除");
//如果不存在就直接创建文件
}else {
try{
//创建文件
file.createNewFile();
System.out.println("文件已经创建");
}catch (IOException e) {
e.printStackTrace();
}
}
}
//获取某个文件的相关信息
public void getMessage(){
File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt");
if (file.exists()) {
//获取文件名字
String name=file.getName();
//获取文件长度
long length=file.length();
//文件是否隐藏的
boolean hidden=file.isHidden();
//文件是否可读
boolean read=file.canRead();
//文件是否可写
boolean writer=file.canWrite();
//获取文件绝对路径
String absolutePath=file.getAbsolutePath();
//获取文件父路径
String parent=file.getParent();
//判断该路径文件是否是文件类型
boolean isfile=file.isFile();
//判断路径文件是否为目录
boolean isdirectory=file.isDirectory();
//获取文件最后一次修改时间
long lasttime=file.lastModified();
//转换一下时间格式
java.util.Date date=new java.util.Date(lasttime);
System.out.println("文件名称是:"+name);
System.out.println("文件长度是:"+length);
System.out.println("该文件是隐藏文件吗?"+hidden);
System.out.println("该文件是可读文件吗?"+read);
System.out.println("该文件是可写文件吗?"+writer);
System.out.println("文件的绝对路径是:"+absolutePath);
System.out.println("文件的父路径是:"+parent);
System.out.println("该文件是一个文件吗?"+isfile);
System.out.println("该文件是一个目录吗?"+isdirectory);
System.out.println("该文件最后修改时间为:"+date);
}else {
System.out.println("文件不存在");
}
}
//获取输出流
public void outputStream(){
//创建输出文件对象
File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt");
try {
//将文件对象加入到输出流中
FileOutputStream fileOutputStream=new FileOutputStream(file);
//获取输出内容(以字符串数组存储
byte buy[]="星光不问赶路人,岁月不负有心人".getBytes();
//将字符数组中的内容输出到文件对象
fileOutputStream.write(buy);
System.out.println("输出完成");
//关闭输出流
fileOutputStream.close();
} catch (Exception e) {
System.out.println("文件异常");
}
}
//获取输入流
public void inputStream(){
//获取文件对象
File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt");
try {
//将文件对象加入到输入流中
FileInputStream fileInputStream=new FileInputStream(file);
//创建字符数组(准备用来存储字符数据
byte[] bs=new byte[1024];
//获取读取流读取字符长度
int len=fileInputStream.read(bs);
//输出字符
System.out.println("文件中的信息是:"+new String(bs,0,len));
//关闭输入流
fileInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行截图:
2、利用JFram来写入文件数据和获取文件数据
public class FileReaderAndFileWriterTest extends JFrame{
//控制文本域
private JScrollPane scrollPane;
private static final long serialVersionUID=1L;
//创建内容面板对象
private JPanel jContentPane=null;
//创建文本域对象
private JTextArea jTextArea=null;
//创建控制面板
private JPanel controlPane=null;
//创建按钮对象
private JButton openButton=null;
private JButton closeButton=null;
//构造器
public FileReaderAndFileWriterTest(){
super();
//初始化面板
initialize();
}
//设置写入文件按钮
private JButton getOpenButton(){
//判断按钮是否为null
if (openButton==null) {
//创建按钮对象
openButton=new JButton();
//设置按钮的提示信息
openButton.setText("写入文件");
openButton.addActionListener(new ActionListener() {
//按钮的单击事件
@Override
public void actionPerformed(ActionEvent e) {
//创建文件对象
File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\ReaderAndWriter.txt");
try{
//创建FileWriter对象,用于输出数据
FileWriter out=new FileWriter(file);
//获取文本域中文件
String string=jTextArea.getText();
//将信息写入磁盘文件
out.write(string);
//关闭输出流
out.close();
}catch (Exception e1) {
e1.printStackTrace();
}
}
});
//调试异常
}else {
System.out.println("不能输出数据");
}
return openButton;
}
//设置读取文件按钮
private JButton getCloseButton(){
//判断按钮式是否为空
if (closeButton==null) {
//创建按钮对象
closeButton=new JButton();
//设置提示信息
closeButton.setText("读取文件");
//按钮的单击事件
closeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//创建文件对象
File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\ReaderAndWriter.txt");
try{
//创建输入文件流
FileReader fileReader=new FileReader(file);
//创建一个char数组,用来存储读入的数据
char byt[] =new char[1024];
//读取数据然后返回将读取的数据
int len=fileReader.read(byt);
//将数据写入到文本域中
jTextArea.setText(new String(byt, 0, len));
//关闭读入流
fileReader.close();
}catch (Exception e1) {
e1.printStackTrace();
}
}
});
}
else {
System.out.println("不能读入数据");
}
return closeButton;
}
//初始化容器
private void initialize(){
//设置模板大小
this.setSize(300,200);
//将面板加入
this.setContentPane(getJContentPane());
//创建容器标题
this.setTitle("JFrame");
}
//获取文本域
private JTextArea getJTextArea(){
if (jTextArea==null) {
//创建一个文本域
jTextArea=new JTextArea();
}
return jTextArea;
}
private JPanel getControlPanel(){
if (controlPane==null) {
//设置控制模板的布局
FlowLayout flowLayout=new FlowLayout();
flowLayout.setVgap(1);
//创建面板
controlPane=new JPanel();
controlPane.setLayout(flowLayout);
controlPane.add(getOpenButton(),null);
controlPane.add(getCloseButton(),null);
}
return controlPane;
}
private JPanel getJContentPane(){
if (jContentPane==null) {
//创建一个新的模板
jContentPane=new JPanel();
//设置模板的布局格式
jContentPane.setLayout(new BorderLayout());
//将scrollPane模板设置在中间
jContentPane.add(getScrollPane(),BorderLayout.CENTER);
//将控制模板放在南边
jContentPane.add(getControlPanel(),BorderLayout.SOUTH);
}
else {
System.out.println("你的模板有问题");
}
return jContentPane;
}
//主方法
public static void main(String[] args) {
//创建对象
FileReaderAndFileWriterTest readerAndWriterTest=new FileReaderAndFileWriterTest();
readerAndWriterTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
readerAndWriterTest.setVisible(true);
}
//创建可变的文本域
protected JScrollPane getScrollPane(){
if (scrollPane==null) {
scrollPane=new JScrollPane();
scrollPane.setViewportView(getJTextArea());
}
return scrollPane;
}
}
运行截图:
注意:一次运行只能读取或者写入一次,后面都是一样的文件内容了,你可以开运行两次,获取两个框,一个进行写入,另一个进行读取就行。
3、利用缓冲区来读写文件
public class BufferedReaderAndBufferedWriter {
public static void main(String[] args) {
//设置内容数组
String[] contents={"须知少年拿云志,曾许人间第一流。","总有人间一两风,填我十万八千梦。","心若有所向往,何惧道阻且长。"};
//创建文件对象
File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\BufferedReaderAndBufferedWriter.txt");
try{
//创建FileWriter对象
FileWriter fileWriter=new FileWriter(file);
//创建BufferWriter对象,并且将FileWriter对象加入BufferWriter
BufferedWriter bufferedWriter=new BufferedWriter(fileWriter);
//遍历数组
for(int i=0;i<contents.length;i++){
//将内容输出
bufferedWriter.write(contents[i]);
//将数组中单个元素的以单行的形式写入文件
bufferedWriter.newLine();
}
//关闭输出流和输入流的时候,先开后关,后开先关
//关闭BufferWriter对象
bufferedWriter.close();
//关闭FileWriter对象
fileWriter.close();
}catch (Exception e) {
e.printStackTrace();
}
try{
//创建FileReader对象
FileReader fileReader=new FileReader(file);
//创建BufferedReader对象并且将FielReader对象加入到BufferedReader对象中
BufferedReader bufferedReader=new BufferedReader(fileReader);
//创建一个空字符串
String string=null;
//创建i并且赋值为0
int i=0;
//while循环按行读取文件中的值
while((string=bufferedReader.readLine())!=null){
i++;
//在控制台输出读取的数据
System.out.println("第"+i+"行:"+string);
}
//规则同上
//关闭BufferedReader对象
bufferedReader.close();
//关闭FileReader对象
fileReader.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
运行截图:
4、利用数据输入流和输出流进行文件读取和内容输出
public class DataInputStreamAndDataOutputStream {
public static void main(String[] args) {
try{
//创建文件对象
File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\DataInputStreamAndDataOutputStream.txt");
//创建FileOutputStream对象,并且将文件对象加入
FileOutputStream fileOutputStream=new FileOutputStream(file);
//创建DataOutputStream对象,并且将FileOutputStream加入DataOutputStream对象
DataOutputStream dataOutputStream=new DataOutputStream(fileOutputStream);
//将数据按UTF格式写入文件中
dataOutputStream.writeUTF("使用writeUTF方法写入数据");
//将数据按Char格式写入文件中
dataOutputStream.writeChars("使用writeChars方法写入数据");
//将数据按Byte格式写入文件中
dataOutputStream.writeBytes("使用writesBytes方法写入数据");
//关闭输出流
dataOutputStream.close();
//创建文件输出流对象,并且将文件对象加入到文件输出流对象中
FileInputStream fileInputStream=new FileInputStream(file);
//创建DataInputStream对象,并且将文件输出流对象加入
DataInputStream dataInputStream=new DataInputStream(fileInputStream);
//控制台输出按照UTF格式读取的数据
System.out.println(dataInputStream.readUTF());
//控制台输出按照Char格式读取的数据
System.out.println(dataInputStream.readChar());
//控制台输出按照Byte格式读取的数据
System.out.println(dataInputStream.readByte());
//关闭DataInputStream输入流
dataInputStream.close();
//关闭文件输入流
fileInputStream.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
运行截图:
注意:大家发现输出不对劲是正常的,因为用非UTF-8格式存储和读取数据是会乱码的·。