Java 将TXT文件拖放到文本区域

Java 将TXT文件拖放到文本区域,java,drag-and-drop,javafx,javafx-2,Java,Drag And Drop,Javafx,Javafx 2,这里有一个名为sourceTx的文本区域,我在其中拖放文件,然后用BufferedReader读取该文件的内容。正如你们可以从下面的代码中看到的,我用absolutepath设置了读取内容的文件 所以,当我拖放某个.txt文件时,它会工作,它会读取内容并将其放入文本区域,但当我拖放某个文件夹时,例如,它也会读取一些内容并将其放入文本区域 所以我想将这个拖放设置为只读.txt文件?我怎么能得到呢 下面是该方法的代码: public void dragDrop(){ source

这里有一个名为sourceTx的文本区域,我在其中拖放文件,然后用BufferedReader读取该文件的内容。正如你们可以从下面的代码中看到的,我用absolutepath设置了读取内容的文件

所以,当我拖放某个.txt文件时,它会工作,它会读取内容并将其放入文本区域,但当我拖放某个文件夹时,例如,它也会读取一些内容并将其放入文本区域

所以我想将这个拖放设置为只读.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();
        }
    });
}
public void dragDrop(){
sourceTx.setOnDragOver(新的EventHandler(){
@凌驾
公共无效句柄(DrageEvent事件){
Dragboard db=event.getDragboard();
if(db.hasFiles()){
event.acceptTransferModes(TransferMode.ANY);
对于(文件:db.getFiles()){
字符串absolutePath=file.getAbsolutePath();
BufferedReader br=null;
试一试{
br=新的BufferedReader(新的InputStreamReader(新的FileInputStream(绝对路径));
字符串行=null;
字符串文本=”;
字符串nl=System.getProperty(“line.separator”,“\n”);
而((line=br.readLine())!=null)
文本+=行+nl;
sourceTx.setText(text.trim());
}捕获(例外e){
show(MessageBoxType.ERROR、I18n.localize(“文件错误”)、I18n.localize(“从所选文件读取内容时出错”);
}最后{
如果(br!=null)
试一试{
br.close();
}捕获(例外e){}
}
}
}否则{
事件。setDropCompleted(假);
}
event.consume();
}
});
}

我在网上找到了一个关于使用拖放的好资源。 以下是您可能需要调查的一些类/事项:

java.awt.dnd.*
我实际上是从在线教程中复制了这一点,但这里有一些代码(不是我的,但经过测试,可以正常工作):

现在是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”,那么您可以在文本区域中打开它


如果有人能帮我找到原始教程/网站,我将非常感激。对于答案的格式也很抱歉。

您好,请尝试使用递归读取您的文件

...
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;
        }

您可以筛选文件路径名。感谢您的评论,但是否有类似的示例或类似的内容?您可以查找许多示例,但它只是一个简单的筛选器,如
if(file.getAbsolutePath().toLowerCase().contains(“.tif”)//继续…
谢谢,我会尝试类似的方法。是的,实际上@eee所说的是最简单的方法。使用拖放功能在网上添加一个指向该优秀资源的链接。
...
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;
        }