无法重命名文件

时间:2016-01-24 11:29:15

标签: java swing

这可能是重复的但是相信我在发布这个问题之前做了很多研究

我正在处理文本编辑器项目“Sodalime”,如果用户忘记将此扩展名放在他们的文件后面,我想将“.txt”附加到文件名,但问题是我只是无法重命名“ userFile“to”userFile.txt“。

下面的代码只是一个演示而不是我的项目Sodalime的一部分

import java.awt.EventQueue;

import javax.swing.JFrame;
import java.awt.BorderLayout;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JMenuItem;
import javax.swing.JMenu;
import java.awt.FlowLayout;
import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JSplitPane;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JButton;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Window;
import javax.swing.JTextPane;
import java.awt.Point;
import javax.swing.JTextArea;
import java.awt.Component;
import java.io.File;
import java.time.temporal.JulianFields;


public class MenuTest {

    JFrame frame;
    /**
     * @wbp.nonvisual location=280,89
     */

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MenuTest window = new MenuTest();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public MenuTest() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(new Rectangle(0, 0, 300, 400));

        JButton btnNewButton = new JButton("New button");
        btnNewButton.setIcon(new ImageIcon("E:\\Sodalime\\icons\\delete.png"));
        btnNewButton.setAlignmentX(Component.CENTER_ALIGNMENT);
        frame.getContentPane().add(btnNewButton, BorderLayout.NORTH);

        JPanel panel = new JPanel();
        frame.getContentPane().add(panel, BorderLayout.CENTER);

        final JTextArea textArea = new JTextArea();
        textArea.setPreferredSize(new Dimension(250,300));
        textArea.setBackground(Color.LIGHT_GRAY);

        btnNewButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent arg0) {
                JFileChooser fc = new JFileChooser();
                int filechoice = fc.showOpenDialog(fc);
                if(filechoice == JFileChooser.APPROVE_OPTION){
                File chosedfile = fc.getSelectedFile();
                FilenewFIle=newFile(chosedfile.getParent()+File.separator+".txt");

                if(chosedfile.renameTo(newFIle)) {
                    textArea.setText("done \n");
                    textArea.append(chosedfile.getAbsolutePath()+"\n");
                    textArea.append(newFIle.getAbsolutePath());
                }
                else textArea.setText("failed");
                }
            }
        });

        panel.add(textArea);


    }
}

我们也非常感谢任何让我的编辑工作正常的建议。这可能是 OFFTOPIC ,但我的编辑器有几个问题 像gridLayout留下了很多Vgap和更多,所以我很感激我的建议,以改善我的编码风格和我的项目

我的项目是在github Sodalime-v1.0

1 个答案:

答案 0 :(得分:2)

制作你的:

File newFIle=new File(chosedfile.getParent()+File.separator+".txt");

要:

File newFIle=new File(chosedfile.getParent()+File.separator+chosedfile.getName()+".txt");

你的代码错了。
例如,如果路径为C:/ABC/d,则代码将为C:/ABC/.txt。您需要在文件分隔符后添加文件名,以使其成为C:/ABC/d.txt