桌面拖放文件至java写的exe应用程序图标来打开文件怎么实现

孤独芳华 2017-05-25 09:33:20
就是windows拖放一个文件用该exe打开,这个exe程序怎么获取这个拖过来的文件
...全文
390 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤独芳华 2017-05-26
  • 打赏
  • 举报
回复
这个方法我试过,写程序时可以用,打包成exe后毫无反应
爱摸鱼de老邪 2017-05-26
  • 打赏
  • 举报
回复
Java中如果你的应用程序被打包成exe可执行文件的话,并且创建了快捷方式图标,可以通过命令行参数实现拖拽文件到图标上打开应用程序的同时打开被拖拽的文件,但要注意的是只有你的入口程序才能获取你刚才被拖动的文件信息。 下面是一个例子: public class MainUI{ public static START_FILE_PATH; public static main(String [] args) { if(args.length>0) { START_FILE_PATH = args[0];//获取文件的URL信息,这样我们在其他的地方就可以创建File对像 }else { START_FILE_PATH = null; } } } class SelectedFile { if(MainUI.START_FILE_PATH!=null&&MainUI.START_FILE_PATH.length()>0) { File file = new File(MainUI.START_FILE_PATH); ......这里可以实现你想要的操作 } }
孤独芳华 2017-05-26
  • 打赏
  • 举报
回复
引用 1 楼 霸气侧漏de影子的回复:
可以看看java.awt.dnd包中的相关类与接口,下面是一个简单的例子:

import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.io.*;
import javax.swing.*;

/**
 * 一个简单的拖放示例程序 将文件或文件夹拖放到文本区然后放下,就会显示这些文件的一些信息
 *
 * @author 
 * @version 
 */
public class ShowMsg {
	
	public static void main(String[] args) {
		new DropTargetFrame();
	}
}

class DropTargetFrame extends JFrame {

	private static final long serialVersionUID = 1L;
	
	private static final int DEFAULT_WIDTH = 300;
	private static final int DEFAULT_HEIGHT = 300;

	public DropTargetFrame() { 
		super("文件信息");
		JTextArea textArea = new JTextArea("@@@@@@@@@@将文件拖放到编辑区@@@@@@@@@@@@\n");
		JScrollPane scrollPane =new JScrollPane(textArea);
		textArea.setLineWrap(true);
		textArea.setEditable(false);
		add(scrollPane);
		new DropTarget(textArea, new TextDropTargetListener(textArea));
		setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	
}

class TextDropTargetListener extends DropTargetAdapter {
	private JTextArea textArea;

	public TextDropTargetListener(JTextArea aTextArea) {
		textArea = aTextArea;
	}

	public void drop(DropTargetDropEvent event) { 
		event.acceptDrop(DnDConstants.ACTION_COPY);
		Transferable transferable = event.getTransferable();
		DataFlavor[] flavors = transferable.getTransferDataFlavors();
		for (int i = 0; i < flavors.length; i++) { 
		DataFlavor d = flavors[i];
		try { 
			if (d.equals(DataFlavor.javaFileListFlavor)) { 
				@SuppressWarnings("unchecked")
				java.util.List<File> fileList = (java.util.List<File>) transferable.getTransferData(d);
				for (File f : fileList) { 
					textArea.append("文件名: "+f.getName() + "\n");
					textArea.append("文件属性: ");
					String value=null;
					if(f.isFile())
						value ="文件, 文件大小: "+f.length()+"bytes";
					else if(f.isDirectory())
						value ="文件夹";
					else 
						value ="未知";
					textArea.append(value+"\n");
				}
			}
		}
		catch (Exception e) { 
			textArea.append(e + "\n");
			}
		}
		textArea.append("\n");
		event.dropComplete(true);
	}
}
我说的是在程序未运行时,拖拽一个文件至该程序图标上,释放文件后程序会自动运行,这个时候要怎么获取这个文件的路径
爱摸鱼de老邪 2017-05-25
  • 打赏
  • 举报
回复
可以看看java.awt.dnd包中的相关类与接口,下面是一个简单的例子:

import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.io.*;
import javax.swing.*;

/**
 * 一个简单的拖放示例程序 将文件或文件夹拖放到文本区然后放下,就会显示这些文件的一些信息
 *
 * @author 
 * @version 
 */
public class ShowMsg {
	
	public static void main(String[] args) {
		new DropTargetFrame();
	}
}

class DropTargetFrame extends JFrame {

	private static final long serialVersionUID = 1L;
	
	private static final int DEFAULT_WIDTH = 300;
	private static final int DEFAULT_HEIGHT = 300;

	public DropTargetFrame() { 
		super("文件信息");
		JTextArea textArea = new JTextArea("@@@@@@@@@@将文件拖放到编辑区@@@@@@@@@@@@\n");
		JScrollPane scrollPane =new JScrollPane(textArea);
		textArea.setLineWrap(true);
		textArea.setEditable(false);
		add(scrollPane);
		new DropTarget(textArea, new TextDropTargetListener(textArea));
		setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	
}

class TextDropTargetListener extends DropTargetAdapter {
	private JTextArea textArea;

	public TextDropTargetListener(JTextArea aTextArea) {
		textArea = aTextArea;
	}

	public void drop(DropTargetDropEvent event) { 
		event.acceptDrop(DnDConstants.ACTION_COPY);
		Transferable transferable = event.getTransferable();
		DataFlavor[] flavors = transferable.getTransferDataFlavors();
		for (int i = 0; i < flavors.length; i++) { 
		DataFlavor d = flavors[i];
		try { 
			if (d.equals(DataFlavor.javaFileListFlavor)) { 
				@SuppressWarnings("unchecked")
				java.util.List<File> fileList = (java.util.List<File>) transferable.getTransferData(d);
				for (File f : fileList) { 
					textArea.append("文件名: "+f.getName() + "\n");
					textArea.append("文件属性: ");
					String value=null;
					if(f.isFile())
						value ="文件, 文件大小: "+f.length()+"bytes";
					else if(f.isDirectory())
						value ="文件夹";
					else 
						value ="未知";
					textArea.append(value+"\n");
				}
			}
		}
		catch (Exception e) { 
			textArea.append(e + "\n");
			}
		}
		textArea.append("\n");
		event.dropComplete(true);
	}
}

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧