Я делаю небольшой gui, в котором я читаю данные из текстового файла в разные JComboBoxes, редактирует пользователя в JComboBoxes, а затем сохраняю его в новом текстовом файле. Новый файл сохраняется, но не в формате, из которого он был прочитан. Код:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import java.awt.event.*;
public class A extends JPanel
{
public A() {
JPanel buttonPanel = new JPanel();
add(buttonPanel);
buttonPanel.setLayout(new GridLayout(0, 2, 10, 10));
JComboBox combo1 = new JComboBox();
combo1.addItem("1ms");
combo1.addItem("2ms");
buttonPanel.add(combo1);
JComboBox combo2 = new JComboBox();
combo2.addItem("1ms");
combo2.addItem("2ms");
buttonPanel.add(combo2);
JComboBox combo3 = new JComboBox();
combo3.addItem("1ms");
combo3.addItem("2ms");
buttonPanel.add(combo3);
JComboBox combo4 = new JComboBox();
combo4.addItem("1ms");
combo4.addItem("2ms");
buttonPanel.add(combo4);
JComboBox[] fieldBoxs = new JComboBox[4];
fieldBoxs[0] = combo1;
fieldBoxs[1] = combo2;
fieldBoxs[2] = combo3;
fieldBoxs[3] = combo4;
ArrayList<String> list = new ArrayList<String>();
final StringBuilder temp = new StringBuilder();
try{
InputStream ips=new FileInputStream("test.txt");
InputStreamReader ipsr=new InputStreamReader(ips);
BufferedReader br=new BufferedReader(ipsr);
String line;
boolean found = false;
while ((line=br.readLine())!=null) {
String[] s = line.split(" ");
list.add(s[0]);
list.add(s[1]);
if (s[0].equals("0") && !found)
{
found = true;
temp.append(line).append("\r\n");
}
else if (found)
{
temp.append(line).append("\r\n");
}
}
br.close();
}
catch (Exception e){
e.printStackTrace();
}
for(int i = 0; i < fieldBoxs.length; i++) {
fieldBoxs[i].setSelectedItem(list.get(i));
}
JButton button = new JButton("SAVE");
buttonPanel.add(button);
button.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try {
StringBuilder con = new StringBuilder();
for (int i = 0; i < fieldBoxs.length; i++)
{
Object Value = fieldBoxs[i].getSelectedItem();
con.append(" ");
con.append(Value);
con.append("\r\n");
}
FileWriter filewriter = new FileWriter(new File("A.txt"));
filewriter.write(con.append(temp).toString());
filewriter.flush();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
}
public static void main(String[] args) {
A app = new A();
JFrame m = new JFrame("A");
m.getContentPane().add(app);
m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
m.pack();
m.setVisible(true);
}
}
Это файл, из которого я читаю значения: test
2ms 1ms
1ms 2ms
0 0
1 2
2 1
1 1
2 2
Так сохраняется мой файл:
2ms
1ms
1ms
2ms
0 0
1 2
2 1
1 1
2 2
Я хотел бы сохранить его как:
2 1
1 2
0 0
1 2
2 1
1 1
2 2
Формат должен быть таким же, как формат, от которого он читается, и ms также не должны появляться в новом сохраненном текстовом файле. Любая помощь будет действительно оценена
JButton button = new JButton("SAVE");
buttonPanel.add(button);
button.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try {
PrintWriter out = new PrintWriter(new File("A.txt"));
out.print(fieldBoxs[0].getSelectedItem());
out.print(" ");
out.print(fieldBoxs[1].getSelectedItem());
out.println();
out.print(fieldBoxs[2].getSelectedItem());
out.print(" ");
out.print(fieldBoxs[3].getSelectedItem());
out.println();
out.print(temp);
out.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
Здесь немного кода, который правильно отформатировал бы ваш пример. Я не рекомендую использовать этот код, если он работает или используется в течение длительного времени, потому что он не является гибким или приятным.
String[] cons = con.split("\n");
for(int i = 0; i < cons.length; i++){
if(i == 0 || i == 2){
cons[i] = cons[i] + " ";
}else{
cons[i] = cons[i] + "\n";
}
}
StringBuilder builder = new StringBuilder();
for (String s : cons) {
builder.append(s);
}
con = builder.toString();¨
В основном код выполняет итерацию через различные строки строки con (удаляет строку с помощью split) и добавляет новый, только если не строка 0 или 2.