Блокнот на Java (Swing)
Формулировка задачи:
Здравствуйте. Я новичок, изучаю Java. В ходе изучения библиотеки Swing я решил написать простой блокнот.
Все просто: один класс контролирует окно (NootepadWindow), а второй все операции с файлами(Nootepad). Третий просто использует (Main) их.
Nootepad.java
Main.java
Теперь ближе к проблеме: Не могу нормально реализовать функцию открытия файла (openFile()). Она должна возвращать байты файла, а потом я уже в textArea пишу их как символы. Видимо я где-то ошибся, потому что при открытии файла у меня вместо текста — неизвестные символы (ну или частично неизвестные, то есть половина может быть нормальной ).
P.S. — Раньше изучал С++, возможно не знаю каких-то тонкостей Java . Также возможно что-то "намутил" с кодировками... Если есть ещё полезные замечания по коду — всегда рад услышать.
NootepadWindow.java
package main;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class NootepadWindow extends JFrame implements ActionListener
{
Nootepad nootepad;
JTextArea textArea;
JMenuBar menuBar;
JMenu mFile;
JMenu mExit;
JMenuItem miNew;
JMenuItem miOpen;
JMenuItem miSave;
public NootepadWindow(String title, int width,int height)
{
nootepad = new Nootepad();
setTitle(title);
setSize(width,height);
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
menuBar = new JMenuBar();
textArea = new JTextArea();
mFile = new JMenu("File");
miNew = new JMenuItem("New");
miOpen = new JMenuItem("Open");
miSave = new JMenuItem("Save");
mExit = new JMenu("Exit");
miNew.addActionListener(this);
miOpen.addActionListener(this);
miSave.addActionListener(this);
mFile.add(miNew);
mFile.add(miSave);
mFile.add(miOpen);
menuBar.add(mFile);
menuBar.add(mExit);
setJMenuBar(menuBar);
add(textArea, BorderLayout.CENTER);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource().equals(miNew))
nootepad.newFile();
if(e.getSource().equals(miOpen))
textArea.setText(nootepad.openFile().toString());
if(e.getSource().equals(miSave))
nootepad.saveFile(textArea.getText().getBytes());
}
}package main;
import javax.swing.*;
import java.io.*;
public class Nootepad
{
private File currentFile;
File newFile() {
JFileChooser fileChooser = new JFileChooser();
fileChooser.showSaveDialog(null);
File file = new File(fileChooser.getSelectedFile().getPath());
try {
file.createNewFile();
}
catch (Exception e) {
e.printStackTrace();
}
return file;
}
void saveFile(byte[] data) {
try {
if(currentFile != null) {
currentFile.delete();
currentFile.createNewFile();
}
else
currentFile = newFile();
FileOutputStream stream = new FileOutputStream(currentFile);
stream.write(data);
stream.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
byte[] openFile() {
JFileChooser fileChooser = new JFileChooser();
fileChooser.showOpenDialog(null);
currentFile = fileChooser.getSelectedFile();
long lenghtFile = currentFile.length();
byte[] fileBytes = new byte[(int)lenghtFile];
try {
FileInputStream stream = new FileInputStream(currentFile);
stream.read(fileBytes);
stream.close();
} catch (Exception e) {
e.printStackTrace();
}
return fileBytes;
}
public File getCurrentFile() {
return currentFile;
}
}package main;
public class Main
{
public static void main(String argc[])
{
NootepadWindow nootepad = new NootepadWindow("MyNootepad", 1024, 1024);
}
}Решение задачи: «Блокнот на Java (Swing)»
textual
Листинг программы
textArea.setText(new String(nootepad.openFile(), StandardCharsets.UTF_8);