Невозможно открыть файл, используя Файл f = новый файл (file_pth);

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

Вот мой код

  public void drop(DropTargetDropEvent dtde) {
  String str4=null;
  try {
    JTextArea comp = null;
    if(Switchtab==2)
        comp=textarea1;
     if(Switchtab==3)
        comp=textarea2;
      if(Switchtab==4)
        comp=textarea3;
       if(Switchtab==1)
        comp=textarea4;

  // Ok, get the dropped object and try to figure out what it is
  Transferable tr = dtde.getTransferable();
  DataFlavor[] flavors = tr.getTransferDataFlavors();
  for (int i = 0; i < flavors.length; i++) {
    System.out.println("Possible flavor: "
        + flavors[i].getMimeType());
    // Check for file lists specifically
    if (flavors[i].isFlavorJavaFileListType()) {
      // Great! Accept copy drops...
      dtde.acceptDrop(DnDConstants.ACTION_COPY);
     // comp.setText("Successful file list drop.\n\n");

      // And add the list of file names to our text area
      java.util.List list = (java.util.List) tr
          .getTransferData(flavors[i]);
      for (int j = 0; j < list.size(); j++) {
        //wcomp.append(list.get(j) + "\n");
       str4=list.get(j)+"\n";

      }

     // Replace '\' with '/' 
      file_pth = str4.replaceAll("\\\\","/" );  
     System.out.println(str4.replaceAll("\\\\","/" ));

      //Open the file


        try {



                File f = new File(file_pth);
                FileInputStream fobj = new FileInputStream(f);
                int len = (int) f.length();
                str4 = "";
                for (int j = 0; j < len; j++) {
                    char str5 = (char) fobj.read();
                    str4 = str4 + str5;

                }

                comp.setText(str4);


            setTitle(str4);

        } catch (Exception e) {
            System.out.println("Caught::" + e);
        }

      // If we made it this far, everything worked.
      dtde.dropComplete(true);
      return;
    }
  }
  // Hmm, the user must not have dropped a file list
  System.out.println("Drop failed: " + dtde);
  dtde.rejectDrop();
} catch (Exception e) {
  e.printStackTrace();
  dtde.rejectDrop();
}
} 

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

Possible flavor: application/x-java-file-list; class=java.util.List
C:/kevin_java/file io/DemoIO.java

Caught::java.io.FileNotFoundException: C:\kevin_java\file io\DemoIO.java
(The filename, directory name, or volume label syntax is incorrect)

Выходные данные не показывают замененную строку. Показывает предыдущую строку с одиночной обратной косой чертой.

2 ответа

Наконец я получил свой ответ. Простое решение

java.util.List list = (java.util.List) tr
          .getTransferData(flavors[i]);
      for (int j = 0; j < list.size(); j++) {

       str4=list.get(j).toString();

      }

 File f = new File(str4);
                FileInputStream fobj = new FileInputStream(f);
...
...
..

редактировать

От Javadoc для isFlavorJavaFileListType,

Возвращает true, если указанный DataFlavor представляет список файловых объектов.

Для этого,

FileInputStream fobj = new FileInputStream(list.get(list.length()-1));
Другие вопросы по тегам