Я пытаюсь создать программу, которая считывает File
, сохраняет содержимое (слова) в качестве ArrayList
, сортирует ArrayList
, а затем записывает содержимое отсортированногоArrayList
обратно в File
.Файла - FileNotFoundException
Я понятия не имею, почему он продолжает давать мне FileNotFoundException
или NullPointerException
(оба происходят, это немного странно) ...
Вот мой код, если кто-то может помочь, что было бы здорово.
Спасибо.
Кстати, код содержит четыре класса:
DriverClass, Вид (графический интерфейс пользователя), ReadFile и WriteFile.
Вы можете игнорировать комментарии, я просто написал их для себя - они довольно очевидны. Для "field.getText();" допустим, пользователь входит C:\Users\Corecase\Desktop\test.txt
Я пробовал делать C:\\Users\\Corecase\\Desktop\\test.txt)
, и это тоже не работает.
Еще раз спасибо!
public class DriverClass
{
public static void main(String[] args)
{
View open= new View();
}
}
// Просмотр
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class View implements ActionListener
{
private JFrame frame = new JFrame("File Sorter");
private JPanel mainPane = new JPanel();
private JPanel textPane = new JPanel();
private JPanel buttonPane = new JPanel();
private JButton sortButton = new JButton("Sort");
private JLabel label = new JLabel("Enter file path: ");
public JTextField field = new JTextField(25);
private Font f = new Font("Trebuchet MS", Font.PLAIN, 20);
public View()
{
frame.setSize(500,500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(mainPane);
mainPane.setLayout(new GridLayout(2,1));
mainPane.setBackground(Color.gray);
mainPane.add(textPane);
mainPane.add(buttonPane);
textPane.setLayout(new GridLayout(2,1));
textPane.add(label);
textPane.add(field);
buttonPane.add(sortButton);
field.setFont(f);
sortButton.setFont(f);
label.setFont(f);
sortButton.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == sortButton)
{
ReadFile r = new ReadFile(field.getText());
WriteFile w = new WriteFile(field.getText());
r.openFile();
r.readAndSortFile();
r.closeFile();
w.openFile();
w.writeFile(r.getList());
w.closeFile();
}
}
}
// ReadFile
import java.io.*;
import java.util.*;
public class ReadFile extends View
{
private ArrayList<String> words = new ArrayList<String>();
private String fileName = new String();
private Scanner x;
public ReadFile(String address)
{
fileName = address;
}
public void openFile()
{
try
{
x = new Scanner(new File(fileName));
}
catch(Exception e)
{
field.setText("Could not read file.");
}
}
public void readAndSortFile()
{
while(x.hasNext())
words.add(x.next());
sort();
}
public void closeFile()
{
x.close();
}
public ArrayList<String> sort()
{
String temp = "";
for(int index = 0; index < words.size(); index++)
{
for(int inner = 0; inner < words.size(); inner++)
{
if((words.get(inner)).compareTo(words.get(inner+1)) > 0)
{
temp = words.get(inner);
words.set(inner, words.get(inner + 1));
words.set(inner + 1, temp);
}
}
}
return words;
}
public ArrayList<String> getList()
{
return words;
}
}
// WriteFile
import java.io.*;
import java.util.*;
import java.lang.*;
public class WriteFile extends View
{
private Formatter x;
private String fileName = new String();
public WriteFile(String address)
{
fileName = address;
}
public void openFile()
{
try
{
x = new Formatter(fileName);
}
catch(Exception e)
{
field.setText("Could not write to file.");
}
}
public void writeFile(ArrayList<String> myWords)
{
for(int index = 0; index < myWords.size(); index++)
x.format("%s", myWords.get(index), "\n");//%s means string - in this case ONE string
}
public void closeFile()
{
x.close();
}
}
Я не вижу разницы между указанными вами двумя входами. Кроме того, попробуйте выполнить косую черту ('/') вместо обратной косой черты. – user845279
Обратные косые черты в Windows. И избежание обратных косых черт необходимо только для строковых литералов, пользователям в консоли (или большинстве типов ввода) не нужно их избегать. –
Не могли бы вы уменьшить вопрос до точки в коде, где есть ошибка, а не давать всю программу? Stacktraces обычно указывают строку исключения. –