Перетащите файл TXT в TextArea - PullRequest
4 голосов
/ 31 марта 2012

Здесь у меня есть текстовая область с именем sourceTx, в которую я перетаскиваю файлы, затем я читаю содержимое этого файла с помощью BufferedReader.Как вы можете видеть из приведенного ниже кода, я установил файл, из которого я читаю содержимое, с absolutepath.

Итак, когда я перетаскиваю какой-то текстовый файл, он работает, он читает содержимое и помещает его в текстовую область, но когда я также перетаскиваю какую-то папку, например, он также читает некоторое содержимое и помещает еготекстовая область.

Итак, я хочу настроить перетаскивание только для чтения .txt файлов?Как я могу получить это?

Вот код этого метода:

  public void dragDrop(){

       sourceTx.setOnDragOver(new EventHandler <DragEvent>()  {
        @Override
        public void handle(DragEvent event) {

            Dragboard db = event.getDragboard();

            if(db.hasFiles()){
                event.acceptTransferModes(TransferMode.ANY);

                for(File file:db.getFiles()){
                    String absolutePath = file.getAbsolutePath();
                    BufferedReader br = null;
                    try {
                        br = new BufferedReader(new InputStreamReader(new FileInputStream(absolutePath)));

                        String line = null;
                        String text = "";

                        String nl = System.getProperty("line.separator", "\n");

                        while((line = br.readLine()) != null)
                            text += line + nl;

                        sourceTx.setText( text.trim() );

                    } catch (Exception e) {
                        MessageBox.show(MessageBoxType.ERROR, I18n.localize("File Error"), I18n.localize("Error while reading content from selected file"));
                    } finally{
                        if(br != null)
                            try {
                                br.close();
                            } catch (Exception e) {}
                    }

                }

            }else{
                event.setDropCompleted(false);
            }

            event.consume();
        }
    });
}

Ответы [ 2 ]

1 голос
/ 15 апреля 2013

Привет, попробуйте прочитать ваш файл с рекурсией

...
for (File file : db.getFiles()) {
    sourceTx.setText(handleFile(file));
}
...
    private String handleFile(File file) {
            String ret = "";
            if (file.isDirectory()) {
                for (File f : file.listFiles()) {
                    ret.concat(handleFile(f));
                }
            } else {
                /*this is your filereader*/
                String absolutePath = file.getAbsolutePath();
                BufferedReader br = null;
                try {
                    br = new BufferedReader(new InputStreamReader(new FileInputStream(absolutePath)));

                    String line = null;
                    String text = "";

                    String nl = System.getProperty("line.separator", "\n");

                    while ((line = br.readLine()) != null)
                        text += line + nl;

                    ret.concat(text.trim());

                } catch (Exception e) {
                    MessageBox.show(MessageBoxType.ERROR, I18n.localize("File Error"), I18n.localize("Error while reading content from selected file"));
                } finally {
                    if (br != null)
                        try {
                            br.close();
                        } catch (Exception e) {
                        }
                }

            }
            return ret;
        }
0 голосов
/ 07 ноября 2012

В Интернете я нашел хороший ресурс по использованию перетаскивания.Вот некоторые классы / вещи, которые вы, возможно, захотите исследовать:

java.awt.dnd.*

Я практически скопировал это из учебника в Интернете, но вот некоторый код (не мой, но протестированный, и он работает):

public class MyFrame extends JFrame
{
    // insert other code here
    JLabel myLabel = new JLabel("My stuff here");
    // Create the drag and drop listener
    MyDragDropListener myDragDropListener = new MyDragDropListener(this);

    // Connect the label with a drag and drop listener
    new DropTarget(myLabel, myDragDropListener);

    // then just add the label
    // also have a method something like "get" which will be used so that the listener can send
    // the list of files dropped here, and you can process it here
}

Теперь для MyDragDropListener.

import java.awt.dnd.*;
import java.awt.datatransfer.*;
import java.io.File;
import java.util.List;
public class MyDragDropListener implements DropTargetListener
{
    MyFrame frame; // initialize in a constructor that takes in the frame

    @Override
    public void dragEnter(DropTargetDragEvent event) {
    }

    @Override
    public void dragExit(DropTargetEvent event) {
    }

    @Override
    public void dragOver(DropTargetDragEvent event) {
    }

    @Override
    public void dropActionChanged(DropTargetDragEvent event) {
    }

    @Override
    public void drop(DropTargetDropEvent event)
    {
        // This is the main chunk of the drag and drop.
        event.acceptDrop(DnDConstants.ACTION_COPY);
        Transferable transferable = event.getTransferable();
        DataFlavor[] flavors = transferable.getTransferDataFlavors();
        for(DataFlavor flavor : flavors)
        {
            if(flavor.isFlavorJavaFileListType())
            {
                List myFiles = (List) transferable.getTransferData(flavor);
                frame.get(myFiles);
            }
        }
    }

}

Вы можете использовать это для создания JFrame для перетаскивания файлов, а затем проверьте, содержит ли имя файла «.txt» (я не уверен, еслиВ Java есть методы определения типа файла, даже если он не имеет расширений.) Если он содержит «.txt», вы можете открыть его в TextArea.

Если кто-нибудь может помочь мне найти оригинальный учебник /сайт, я был бы очень признателен.Также извините за форматирование ответа.

...