2014-02-23 3 views
0

Я работаю над своим словом Процессор, и мне удалось получить файл сохранения для работы. Однако я сталкиваюсь с раздражающей ошибкой, когда сохранение файла приведет к тому, что имя файла (которое введено) будет дублировать себя, например, скажем, что вы вводите имя файла «test», который файл сохранит, и он появится как «testtest». текст". Я также был бы очень признателен за обзор кода, если он может быть предложен. Я также пытаюсь придерживаться MVC (модель-контроллер парадигмы) и мне интересно, если я правильно это делать, может я аннотация это дальше, в любом случае вот мой код: МодельДублирование имен файлов при сохранении

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 

public class DataStuff { 

    private File file; 

    String text; 
    String name; 
    private File saveFile; 
    int counter = 0; 
    FileInputStream fis = null; 
    FileOutputStream fout = null; 
    StringBuilder sb = new StringBuilder(4096); 

    int count = 0; 
    public void loadFile(File fileName){ 
     this.file = fileName; 
     try{ 
      fis = new FileInputStream(file); 

      while ((counter = fis.read()) != -1) { 

       System.out.print((char) counter); 

       sb.append((char) counter); 

      } 

     } 
     catch(IOException ex){ 
      System.out.println("file couldn't be opened, or was incorrect or you clicked cancel"); 
     } 
     finally { 
      try { 
       if (fis != null) 
        fis.close(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    } 
    public StringBuilder showText(){ 

     return sb; 

    } 
    public void saveFile(String name, String text) { 
     this.name = name; 

     try{     
       fout = new FileOutputStream(name); 
       fout.write(text.getBytes()); 
       System.out.println("file saving worked");   
     } 
     catch(IOException e){ 
      System.out.println("File failed to save or something went horribly wrong"); 
     }  
    } 
} 

это вид.

import java.awt.Font; 
import java.awt.event.ActionListener; 


import javax.swing.ImageIcon; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 


public class WordFrame extends JFrame{ 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private JMenuBar menubar; 
    private JMenu fileMenu, editMenu, viewMenu; 
    JMenuItem saveMenuItem, openMenuItem, newMenuItem, exitMenuItem, FontMenuItem; 
    JTextArea textArea = new JTextArea(1000,900); 
    private int width = 1280, height = 980; 
    private JScrollPane scrollbar = new JScrollPane(textArea); 
    JFileChooser fileChooser = new JFileChooser(); 
    private int textHeight = 12; 
    private Font yeah = new Font(Font.SANS_SERIF, 2, textHeight); 

    public WordFrame(){ 
     setUI(); 
     addMenuBar(); 
     textArea.setFont(yeah); 
    } 

    public void setUI(){ 
     this.setTitle("Word Processor"); 
     this.setIconImage(new ImageIcon(this.getClass().getResource("Bridge.jpg")).getImage()); 
     this.setSize(width, height); 
     this.setLocation(0,0); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.add(scrollbar); 

    } 

    public void addMenuBar(){ 
     menubar = new JMenuBar(); 
     fileMenu = new JMenu(" File "); 
     editMenu = new JMenu("Edit "); 
     viewMenu = new JMenu("View "); 

     newMenuItem = new JMenuItem("New"); 
     fileMenu.add(newMenuItem); 
     fileMenu.addSeparator(); 
     fileMenu.setMnemonic('f'); 

     openMenuItem = new JMenuItem("Open"); 

     fileMenu.add(openMenuItem); 

     saveMenuItem = new JMenuItem("Save"); 
     fileMenu.add(saveMenuItem); 

     fileMenu.addSeparator(); 
     exitMenuItem = new JMenuItem("Exit"); 
     fileMenu.add(exitMenuItem); 

     FontMenuItem = new JMenuItem("Font"); 
     editMenu.add(FontMenuItem); 
     menubar.add(fileMenu); 
     menubar.add(editMenu); 
     menubar.add(viewMenu);  

     this.setJMenuBar(menubar); 
    } 

    public void setFontSize(int i){ 
     this.textHeight = i; 
    } 
    public void addListener(ActionListener listener){ 
     openMenuItem.addActionListener(listener); 
     exitMenuItem.addActionListener(listener); 
     saveMenuItem.addActionListener(listener); 
    } 
} 

и, наконец, контроллер

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 



public class ProcessEvents { 

    private WordFrame frame = new WordFrame(); 
    private DataStuff data = new DataStuff(); 
    private DialogBoxes dialogs = new DialogBoxes(); 
    private boolean fileSaved; 
    String fileName = ""; 
    int fontSize = 0; 
    public ProcessEvents(WordFrame frame, DataStuff data){ 
     this.frame = frame; 
     this.data = data; 
     this.frame.addListener(new wordProcessListener()); 
    } 
    class wordProcessListener implements ActionListener{ 

     @SuppressWarnings("static-access") 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      if(e.getSource().equals(frame.openMenuItem)){ 
       frame.fileChooser.showOpenDialog(frame); 
       File f = frame.fileChooser.getSelectedFile(); 

       System.out.println("Command Executed: open"); 

       data.loadFile(f.getAbsoluteFile()); 

       if(data.showText() != null){      
        System.out.println(data.showText());     
        frame.textArea.append(data.showText().toString()); 
       } 
      } 

      if(e.getSource().equals(frame.FontMenuItem)){ 
       System.out.println("font"); 
      } 

      if(e.getSource().equals(frame.exitMenuItem)){ 
       dialogs.getConfirmDialog("exitWithoutSave"); 
      } 

      if(e.getSource().equals(frame.saveMenuItem)){ 
       frame.fileChooser.showSaveDialog(null); 
       File f = frame.fileChooser.getSelectedFile(); 
       String text = frame.textArea.getText(); 
       data.saveFile(f.getAbsolutePath()+f.getName()+".txt", text); 
       System.out.println(f.getName()); 
       fileSaved = true; 

      }   
     }  
    } 
} 

Я намерен реализовать такие функции, как выбор шрифта и т.д. Я очень ценю критику на моем коде какие-либо недостатки, которые я не сумел запятнать и т.д., и как всегда Я высоко ценю любую обратную связь.

Редактировать: также я хотел бы спросить, еще один досадный аспект - если вы решили отменить при сохранении файла, я получаю трассировку стека, если файл имеет нулевые решения, потому что я попытался добавить блок if в метод saveFile в DataStuff, и это не сработало, поэтому это происходит в контроллере.

+0

прочитайте мой вопрос –

+0

Не желая быть придирчивым, но код, который вы обозначили как модель, кажется, является видом. – JamesB

+0

JamesB Да, вы правы, его неправильно маркировали. Идти менять его сейчас, если кто-то запутается. –

ответ

2

Дублированное имя - это потому, что вы делаете f.getAbsolutePath()+f.getName()+".txt" - Я думаю, что getAbsolutePath уже содержит имя файла.

Для обзора кода есть сайт обмена стеками, настроенный именно для этого, вы получите лучший ответ там.

+0

Да, я возьму его там, но я хотел знать, могу ли я ударить двух зайцев одним выстрелом. Я проверю ответ, который вы дали –

+0

Да, это сработало как шарм. проблема исправлена, спасибо. Быстрое исправление никогда, так быстро, на самом деле мне все еще нужно подождать 7 минут, прежде чем я смогу нажать «принять ответ». –

Смежные вопросы