package TT; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.filechooser.FileNameExtensionFilter; public class HFile { public void openFile(JFrame f,JTextArea textArea) { // 创建一个默认的文件选取器 JFileChooser fileChooser = new JFileChooser(); // 设置默认显示的文件夹为当前文件夹 fileChooser.setCurrentDirectory(new File(".")); // 设置文件选择的模式(只选文件、只选文件夹、文件和文件均可选) fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); // 设置是否允许多选 fileChooser.setMultiSelectionEnabled(false); // 设置默认使用的文件过滤器 fileChooser.setFileFilter(new FileNameExtensionFilter("txt(*.txt)", "txt")); // 打开文件选择框 int result = fileChooser.showOpenDialog(f); if(result==1) return ; if (result == JFileChooser.APPROVE_OPTION) { try { textArea.setText(""); File file = fileChooser.getSelectedFile(); FileInputStream fis=new FileInputStream(file); try{ //读取数据,并将读取到的数据存储到数组中 byte[] data = new byte[1024]; //数据存储的数组 int i = fis.read(data); //解析数据 String s = new String(data,0,i); textArea.append(s); }catch(Exception e){ e.printStackTrace(); }finally{ try{ fis.close(); }catch(Exception e){} } f.setTitle(file.getName()+" - 文本编辑器"); } catch (IOException e) { e.printStackTrace(); } } } public void saveFile(JFrame f,JTextArea textArea) { // 创建一个默认的文件选取器 JFileChooser fileChooser = new JFileChooser(); // 设置默认显示的文件夹为当前文件夹 fileChooser.setCurrentDirectory(new File(".")); // 设置打开文件选择框后默认输入的文件名 fileChooser.setSelectedFile(new File("新建记事本.txt")); // 打开文件选择框 int select = fileChooser.showSaveDialog(f); if (select == JFileChooser.APPROVE_OPTION) { // 保存文本内容 File file = fileChooser.getSelectedFile(); try { //覆盖文件式写入 OutputStream outToFileEnd = new FileOutputStream(file); String string = textArea.getText(); byte[] bs = string.getBytes(); outToFileEnd.write(bs); outToFileEnd.close(); f.setTitle(file.getName()+" - 文本编辑器"); } catch (Exception e1) { e1.printStackTrace(); } } } 其中的Java基础知识}
时间: 2024-03-04 21:51:53 浏览: 67
这段代码是一个 Java 类 HFile,包含了打开和保存文件的方法。其中使用了 Java 的文件操作类 FileInputStream、FileOutputStream 和文件选择器 JFileChooser。打开文件方法会打开一个文件选择框,可以选择一个文本文件,然后读取该文件的内容并显示在一个 JTextArea 组件中。保存文件方法会打开一个文件选择框,可以选择保存的位置和文件名,然后将 JTextArea 组件中的文本内容保存到指定文件中。
相关问题
package src; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; public class Test3 extends JFrame { JTextArea txta=new JTextArea(10,21); JScrollPane scrp=new JScrollPane(txta); JButton btn1=new JButton("读t3_1.txt到文本框"); JButton btn2=new JButton("保存到t3_2.txt"); JPanel p=new JPanel(); public Test3() { p.add(scrp); p.add(btn1); p.add(btn2); this.setContentPane(p); this.setSize(300,270); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); this.setVisible(true); } public static void main(String[] args) { Test3 fr=new Test3(); fr.setTitle("第3题"); } }补全上述代码
可以按照以下步骤进行代码的补全:
1. 在Test3类中添加一个构造方法,然后在方法中为btn1和btn2添加监听器,用于实现读取和保存文件的功能。
2. 在读取文件的监听器中,可以使用JFileChooser组件选择文件,然后使用FileInputStream和BufferedInputStream读取文件内容,并将内容显示在文本框中。
3. 在保存文件的监听器中,可以使用JFileChooser组件选择保存文件的路径和文件名,然后使用FileOutputStream和BufferedOutputStream将文本框中的内容写入到文件中。
完整代码如下:
```
package src;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Test3 extends JFrame {
JTextArea txta = new JTextArea(10, 21);
JScrollPane scrp = new JScrollPane(txta);
JButton btn1 = new JButton("读t3_1.txt到文本框");
JButton btn2 = new JButton("保存到t3_2.txt");
JPanel p = new JPanel();
public Test3() {
p.add(scrp);
p.add(btn1);
p.add(btn2);
this.setContentPane(p);
this.setSize(300, 270);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setVisible(true);
// 为btn1添加监听器,读取文件内容
btn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 创建文件选择器
JFileChooser chooser = new JFileChooser();
chooser.setDialogTitle("选择文件");
int result = chooser.showOpenDialog(Test3.this);
if (result == JFileChooser.APPROVE_OPTION) {
try {
// 读取文件内容
File file = chooser.getSelectedFile();
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] buffer = new byte[(int) file.length()];
bis.read(buffer);
String text = new String(buffer);
txta.setText(text);
bis.close();
fis.close();
} catch (IOException ex) {
JOptionPane.showMessageDialog(Test3.this, "读取文件失败");
}
}
}
});
// 为btn2添加监听器,保存文件内容
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 创建文件选择器
JFileChooser chooser = new JFileChooser();
chooser.setDialogTitle("保存文件");
int result = chooser.showSaveDialog(Test3.this);
if (result == JFileChooser.APPROVE_OPTION) {
try {
// 写入文件内容
File file = chooser.getSelectedFile();
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
String text = txta.getText();
byte[] buffer = text.getBytes();
bos.write(buffer);
bos.close();
fos.close();
} catch (IOException ex) {
JOptionPane.showMessageDialog(Test3.this, "保存文件失败");
}
}
}
});
}
public static void main(String[] args) {
Test3 fr = new Test3();
fr.setTitle("第3题");
}
}
```
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class xhj { public static void main(String[] args) { if (args.length != 2) { System.out.println("请输入正确的输入流和输出流文件名!"); return; } String inputFileName = args[0]; String outputFileName = args[1]; InputStream inputStream = null; OutputStream outputStream = null; try { File inputFile = new File(inputFileName); inputStream = new FileInputStream(inputFile); File outputFile = new File(outputFileName); outputStream = new FileOutputStream(outputFile); byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length); } System.out.println("文件复制成功!"); } catch (IOException e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }该代码中涉及的Java知识
该代码涉及的Java知识包括:
1. 文件操作:使用 File 类创建输入和输出文件对象,使用 FileInputStream 和 FileOutputStream 类读取和写入文件。
2. 输入输出流:使用 InputStream 和 OutputStream 类读取和写入数据。
3. 字节数组:使用 byte 数组作为缓冲区,读取和写入文件的数据。
4. 异常处理:使用 try-catch-finally 语句处理文件读写可能出现的异常,确保操作完成后关闭输入输出流。
5. 命令行参数:使用 args[] 数组获取用户在命令行中输入的输入流和输出流文件名。
阅读全文