Java 无法使用文件f=新文件(文件pth)打开文件;
我试图通过拖放到JTextField来打开一个文件,但我总是得到错误 这是我的密码Java 无法使用文件f=新文件(文件pth)打开文件;,java,file,netbeans,io,drag,Java,File,Netbeans,Io,Drag,我试图通过拖放到JTextField来打开一个文件,但我总是得到错误 这是我的密码 public void drop(DropTargetDropEvent dtde) { String str4=null; try { JTextArea comp = null; if(Switchtab==2) comp=textarea1; if(Switchtab==3) comp=textarea2; if(Switch
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();
}
}
输出不显示替换的字符串。
它用一个反斜杠显示上一个字符串。编辑
从isFlavorJavaFileListType的
如果指定的DataFlavor表示文件对象列表,则返回true
因此,
FileInputStream fobj = new FileInputStream(list.get(list.length()-1));
我终于得到了答案。
简单解
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);
...
...
..
java.util.List=(java.util.List)tr
.getTransferData(香料[i]);
对于(int j=0;j
发布您的错误/例外您的目录名中是否有空格?(文件io
)它适用于没有空间的文件吗?如果对路径进行硬编码,它是否有效<代码>文件f=新文件(“c:/kevin_java/File io/DemoIO.java”)代码>你确定这是正确的路径吗?@kamil我已经发布了我的error@JonSkeet是的,我的目录里有空间。如果我在没有空格的目录中执行此操作,则会出现相同的错误。主要问题在于行File f=new File(File_pth);我无法获取有效文件。@user3712382实际上,str4=list.get(j)+“\n”代码>是问题所在。请注意,没有添加字符串,因此只能使用file\u pth=str4.replaceAll(“\\\\\”,“/”)获取最后一个列表元素(它有一个尾随的换行符!)代码>但即使在使用trim()之后,我仍然无法获得有效的文件路径。您是否仍然获得相同的异常?str4=(String)list.get(list.size()-1);我得到了异常java.lang.ClassCastException:java.io.File不能转换为java.lang.String
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);
...
...
..