Jak zapisać i odczytać plik np:*.txt,*.dat

0

Witam
mam pytanie
poniżej podaje kod który tworzę i moje pytanie jak zrobić, żeby plik zapisywał się do pliku np:. .dat,.txt lub innym formacje textArea oraz odczytywał plik .dat,.txt lub innym formacje z textArea.
bo na tym się zaciąłem
podaje poniżej kod

import java.awt.*;
import java.awt.event.*;
import java.io.*;


public class testab extends Frame implements WindowListener, ActionListener
{ TextArea textArea;
Frame okno_info = new Frame("O_programie");

  public testab()
  { super ( );
  
    addWindowListener(this);
    setSize(800, 600);
    setResizable(false);
    setTitle("Edytor plików tekstowych");
    setLayout(null);
      
    // okno_info.setDefaultCloseOperation(Frame.EXIT_ON_CLOSE);
     okno_info.setSize(300,300);
    
    
    textArea = new TextArea();
    textArea.setBounds(0, 40, 400, 400);
    this.add(textArea);
      
    MenuBar menuBar = new MenuBar();
    setMenuBar(menuBar);
    Menu menu = new Menu("Plik");
    menu.add(new MenuItem("Nowy"));
    menu.add(new MenuItem("Otwórz"));
    menu.add(new MenuItem("Zapisz"));
    menu.add(new MenuItem("-"));
    menu.add(new MenuItem("Zamknij"));
    menuBar.add(menu);
      
    
    
     Menu kod = new Menu("Kody");
     menuBar.add(kod);
     kod.add(new MenuItem("zaszyfrowany"));
     kod.add(new MenuItem("odszyfrowany"));
     
     Menu pomoc = new Menu("Pomoc");
     menuBar.add(pomoc);
     pomoc.add(new MenuItem("O_programie"));
      
    menu.addActionListener(this);
    setVisible(true);
     
  }
 
  
  
  // metoda obsługująca wybraną opcję z menu
  public void actionPerformed (ActionEvent e)
  { 
      String command = e.getActionCommand();
    if (command.equals("Zamknij"))    
    { 
        System.exit(0); 
    }
    
    else if (command.equals("Nowy"))
    {
        textArea.setText("");   //czyści tekst
    }
    else if (command.equals("Otwórz"))
    { 
        String fileName = ShowFileDialog(FileDialog.LOAD);
        
      if (fileName != null)
      { // wywołanie metody otwarcia pliku
        Load(fileName);
      }
    }
    else if (command.equals("Zapisz"))
    { String fileName = ShowFileDialog(FileDialog.SAVE);
      if (fileName != null)
      { // wywołanie metody zapisu pliku
        Save(fileName);
      }
    }
    else if (command.equals("O_programie"))
    {
      
    }
  }

 
  
  
  // metoda odpowiedzialna za wyświetlanie okna wyboru pliku
  public String ShowFileDialog (int mode)
  { // tworzymy nowe okno dialogowe
    FileDialog fileDialog = new FileDialog(this);

    // ustalamy tryb odczyt / zapis
    fileDialog.setMode(mode);
    // wyświetlamy okno dialogowe
    fileDialog.show();
    // pobieramy i zwracamy nazwę wybranego pliku
    String fileName = fileDialog.getFile();
    return (fileName);
  }

  // wczytanie i wyświetlenie pliku
  public void Load (String fileName)
  { // tworzenie zmiennych strumienia i pliku wejściowego
    FileInputStream fileInput = null;
    File file = new File(fileName);

    // otwarcie pliku wejściowego:
    // może wystąpić wyjątek, dlatego musimy użyć bloku try...catch
    try
    { fileInput = new FileInputStream(file);
    }
    catch(FileNotFoundException e)
    { System.out.println("Brak pliku " + fileName);
      return;
    }

    textArea.setText("");
    byte buffer [ ] = new byte [ (int)file.length() ];
    // czytanie z pliku:
    // tu też może wystąpić wyjątek, dlatego używamy bloku try...catch
    try
    { fileInput.read(buffer);
      { textArea.append (new String(buffer));
      }
	  fileInput.close();
    }
    catch(IOException e)
    { System.out.println("Bład podczas czytania pliku");
      return;
    }

    // zmieniamy tytuł aplikacji
    setTitle("Edytor plików tekstowych [" + fileName + "]");
  }


  // zapis tekstu do pliku na dysk
  public void Save (String fileName)
  { // tworzenie zmiennych strumienia i pliku wyjściowego
    FileOutputStream fileOutput = null;
    File file = new File(fileName);

    // otwarcie pliku wyjściowego:
    // może wystąpić wyjątek, dlatego musimy użyć bloku try...catch
    try
    { fileOutput = new FileOutputStream(file);
    }
    catch(FileNotFoundException e)
    { System.out.println("Błąd otwarcia do zapisu pliku " + fileName);
      return;
    }

    // zapis do pliku:
    // tu też może wystąpić wyjątek, dlatego używamy bloku try...catch
    try
    { byte buffer[] = textArea.getText().getBytes();
      fileOutput.write(buffer);
	  fileOutput.close();
    }
    catch(IOException e)
    { System.out.println("Błada podczas zapisu pliku");
      return;
    }

    // zmieniamy tytuł aplikacji
    setTitle("Edytor plików tekstowych [" + fileName + "]");
  }
  public static void main(String args[])
  { 
    new testab();
  }

  public void windowClosing    (WindowEvent e) { System.exit(0); }
  public void windowClosed     (WindowEvent e) {   }
  public void windowOpened     (WindowEvent e) {   }
  public void windowIconified  (WindowEvent e) {   }
  public void windowDeiconified(WindowEvent e) {   }
  public void windowActivated  (WindowEvent e) {   }
  public void windowDeactivated(WindowEvent e) {   }
}

z góry dziękuje bardzo za odpowiedz

0

Witam
udało mi się zrobić zapis pliku do txt
tylko że chciałbym wybierać jakim rozszerzeniem mam odczytać i zapisać
a oto kod który użyłem
może ktoś pomoże jak zapisać pliki o różnych rozszerzeniach, nie żeby ręcznie wpisywać




  public void fOpen (  )   
     {   
     FileDialog fd = new FileDialog ( new Frame (  ) , "Open file...", FileDialog.LOAD ) ;  
     fd.setFile ( "*.txt" ) ; 
     fd.show (  ) ;  
     if  (  fd.getFile (  )  != null  )  {   
       String path=fd.getDirectory (  )  + fd.getFile (  ) ;  
       try  {   
         FileInputStream fr=new FileInputStream ( path ) ; 
         BufferedInputStream br=new BufferedInputStream ( fr ) ;  
           DefaultEditorKit dek = new DefaultEditorKit (  ) ; 
           dek.read ( br, orginal.getDocument (  ) , 0 ) ;   
    
        } catch ( Exception e )  {   
           System.err.println ( "Error: " +e ) ;  
        }   
       System.out.println ( fd.getDirectory (  )  + fd.getFile (  )  ) ;  
      } else  
        System.out.println ( "Open cancelled!" ) ;   
     }  
     
    public void fSave (  )  {    
     FileDialog fd = new FileDialog ( new Frame (  ) , "Save file...", FileDialog.SAVE ) ; 
     fd.setFile ( "*.txt" ) ; 
     fd.show (  ) ;  
     if  (  fd.getDirectory (  )  != null  )  
     if  (  fd.getFile (  )  != null  )  {   
       String stt =fd.getDirectory (  ) ;   
       String st = fd.getFile (  ) ; 
       
       try {   
         FileWriter fw = new FileWriter ( stt + st ) ;  
         BufferedWriter br =new BufferedWriter ( fw ) ;  
         DefaultEditorKit dek = new DefaultEditorKit (  ) ; 
         dek.write ( br, zaszyfrowane.getDocument (  ) , 0,zaszyfrowane.getDocument (  ) .getLength (  )  ) ; 
       fw.close (  ) ;          
        }  
       catch ( Exception e )  {   
           System.err.println ( "Error: " +e ) ;  
            
        }   
          System.out.println ( fd.getDirectory (  )  + fd.getFile (  )  ) ;  
      } else  
       System.out.println ( "Save cancelled !" ) ;  
  }  
 

dziękuje za odpowiedz

0

Spróbuj w taki sposób:

[to jest fragment mojego programu, ale powinien Ci się przydać]

fileSave = new JMenuItem("Zapisz");
fileSave.addActionListener(
	new ActionListener() {
		private String getExtension(File f) {
	        String ext = null;
	        String s = f.getName();
	        int i = s.lastIndexOf('.');

	        if (i > 0 &&  i < s.length() - 1) {
	            ext = s.substring(i+1).toLowerCase();
	        }
	        
	        return ext;
		}
		
		public void actionPerformed(ActionEvent e) {
			JFileChooser fileDialog = new JFileChooser();
			fileDialog.addChoosableFileFilter(
				new FileFilter() {
					public boolean accept(File f) {
						if (f.isDirectory()) {
					        return true;
					    }

					    String extension = getExtension(f);
					    if (extension != null) {
					        if (extension.equals("jpg") || extension.equals("png") || extension.equals("bmp") || extension.equals("vg"))
					            return true;
					        else return false;
					    }

					    return false;
					}

					public String getDescription() {
						return "*.jpg, *.png, *.bmp, *.vg";
					}
				});
			
			int ret = fileDialog.showSaveDialog(MainWindow.this);
			
			if (ret == JFileChooser.APPROVE_OPTION) {
				try {
					leftCanvas.saveImage(fileDialog.getSelectedFile());
				}
				catch (IOException exc) {
					JOptionPane.showMessageDialog(null, "Nie udało się zapisać obrazka", "Błąd", ERROR);
				}
			}
		}
	}
);
0

Witam
udało mi się zrobić otwarciem pliku do wybranych rozszerzeń np: .txt, .java itd
tylko jest jeden problem

tylko zamiast wyświetla zawartość pliku to kopiuje tylko nazwę pliku np:
plik kot.txt zawartość ala ma kota

to w textarea wyświetla
kot.txt zamiast ala ma kota

tylko wygląd otwarcia pliku wygląda w stylu linux

o to kod

czy muszę zastosować BufferedInputStream do odczytu zawartości pliku proszę o pomoc

na razie robię odczyt pliku później zapis



 





 
  public class ExtensionFilter extends FileFilter {
    private String extensions[];

    private String description;

    public ExtensionFilter(String description, String extension) {
      this(description, new String[] { extension });
    }

    public ExtensionFilter(String description, String extensions[]) {
      this.description = description;
      this.extensions = (String[]) extensions.clone();
    }

    public boolean accept(File file) {
      if (file.isDirectory()) {
        return true;
      }
      int count = extensions.length;
      String path = file.getAbsolutePath();
      for (int i = 0; i < count; i++) {
        String ext = extensions[i];
        if (path.endsWith(ext)
            && (path.charAt(path.length() - ext.length()) == '.')) {
          return true;
        }
      }
      return false;
    }

    public String getDescription() {
      return (description == null ? extensions[0] : description);
    }
  }
 









public void fOpen (  ) 
     {   
        
         JFileChooser chooser = new JFileChooser(".");
        FileFilter type1 = new ExtensionFilter("*.java", ".java");
        FileFilter type2 = new ExtensionFilter("Image files",
            new String[] { ".jpg", ".gif", "jpeg", "xbm" });
        FileFilter type3 = new ExtensionFilter("HTML files",
            new String[] { ".htm", ".html" });
        chooser.addChoosableFileFilter(type1);
        chooser.addChoosableFileFilter(type2);
        chooser.addChoosableFileFilter(type3);
        chooser.setFileFilter(type1); // Initial filter setting 
         int ret = chooser.showDialog(null, "otwórz_plik...");
        // chooser.setFileView(view);
       // int status = chooser.showOpenDialog(c.this);
        if (ret == JFileChooser.APPROVE_OPTION) {
         File plik = chooser.getSelectedFile();
          orginal.setText(plik.getParent());
         orginal.setText(plik.getName());
          System.out.println(orginal);
         // System.out.println(f);
       } else if (ret == JFileChooser.CANCEL_OPTION) {
          orginal.setText(" ");
          zaszyfrowane.setText(" ");
        }

}

 

dziękuje za odpowiedz

0
 orginal.setText(plik.getParent());
         orginal.setText(plik.getName());

w tym miejscu do orginal przypisujesz nazwe pliku, dlatego wypisuje na ekran kot.txt.

w aplikacji, ktora kiedys pisalem wczytywanie z pliku zrobilem tak:

openFile.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent e) {
		filter = new FileNameExtensionFilter(".txt & .doc file", "txt", "doc");
		fileopen.addChoosableFileFilter(filter);
		fileopen.showOpenDialog(null);
		file = fileopen.getSelectedFile();
		extractor = null ;
		try {
			if(file.getName().endsWith(".txt")) {
			FileInputStream fstream = new FileInputStream(file);
			DataInputStream in = new DataInputStream(fstream);
			BufferedReader br = new BufferedReader(new InputStreamReader(in));
			String strLine;

			while ((strLine = br.readLine()) != null) 
			{
				textPane.setText(textPane.getText() + strLine + "\n"); 
			}
			in.close();
			}
		}
		catch(Exception e1) { 
			e1.printStackTrace();
		} 
	}
 }); 

tylko ze moja aplikacja miala UI.

1 użytkowników online, w tym zalogowanych: 0, gości: 1