作者:金良([email protected]) csdn博客:http://blog.csdn.net/u012176591
Java程序在查找资源的相对路径时是从工程根目录下开始的。
下面是读取文本、图片和视频的介绍:
首先看Eclipse工程的架构,注意项目根目录下有个resources文件夹,里面是资源文件,是我们要读取的内容。
文本效果截图:
图片效果截图:
视频效果截图:
主类代码:
文本和图片资源的访问路径可以使相对路径也可以使绝对路径,我们把资源文件放在工程根目录下的resources文件夹(我们自己新建的文件夹,用于存放资源文件,当然也可以取其它名字,也可以建多级路径),由于Java程序对相对路径的资源是从根目录下开始查找的,所以相对路径的资源路径可以这样写:/resources/*,其中*是具体的资源名。如果用绝对路径,比如把资源文件放在E盘根目录下,那么资源路径可以这样写:file:/E:/*,其中*是具体的资源名。
对于视频文件来说,可以向前面介绍的那样使用绝对路径;如果要使用相对路径的话,有点特殊,如下图所示:
可以看到文件名为“hello.avi”视频位于工程根目录下,其文件路径为“file:./hello.avi”,依次类推。
package bupt.xujinliang.showimage; /** * * @author jin * */ public class ResourcePathTest { public static void main(String[] args) { //String imagePath="adapterpattern.jpg";//能用 //String imagePath="src/resources/adapterpattern.jpg";//能用 String imagePath="resources/girl.jpg"; //String videoPath = "file:/resources/hello.avi";//不能用 //String videoPath = "resources/hello.avi";//不能用 String videoPath = "file:/E:/hello.avi";//能用 String txtPath = "resources/jin.txt";//可用 new ShowImage(imagePath); new PlayVideo(videoPath).play(); new ReadText(txtPath).readTxtFile(); } }
读取文本的类的代码:
package bupt.xujinliang.showimage; /** * @jin */ import java.awt.Frame; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import javax.swing.JLabel; public class ReadText { private String filePath; private Frame f; private JLabel label; public ReadText(String filePath) { this.filePath = filePath; f = new Frame("读取文本"); label = new JLabel("读取文本前"); f.add(label); f.setSize(600, 100); f.setVisible(true); } public void readTxtFile(){ try { String encoding="GBK"; File file=new File(filePath); if(file.isFile() && file.exists()){ //判断文件是否存在 InputStreamReader read = new InputStreamReader( new FileInputStream(file),encoding);//考虑到编码格式 BufferedReader bufferedReader = new BufferedReader(read); String lineTxt = null; while((lineTxt = bufferedReader.readLine()) != null){ System.out.println(lineTxt); label.setText(lineTxt); } read.close(); }else{ System.out.println("找不到指定的文件"); } } catch (Exception e) { System.out.println("读取文件内容出错"); e.printStackTrace(); } } }读取图片的类的代码:
package bupt.xujinliang.showimage; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; /** * * @author jin * */ public class ShowImage extends Frame{ String filename; Graphics g; public ShowImage(String filename) { super("图片展示"); this.setSize(420,350); this.setVisible(true); this.filename = filename; } public void paint (Graphics g) { Image image = this.getToolkit().getImage(filename); g.drawImage(image, 0, 0, this); } }
package bupt.xujinliang.showimage; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.Frame; import java.awt.Panel; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import javax.media.ControllerEvent; import javax.media.ControllerListener; import javax.media.EndOfMediaEvent; import javax.media.Manager; import javax.media.NoPlayerException; import javax.media.Player; import javax.media.PrefetchCompleteEvent; import javax.media.RealizeCompleteEvent; /** * * @author jin * */ public class PlayVideo implements ControllerListener { String FilePath; String Title = "视频演示"; private Frame f; private Player player; private Component videoComponent; private Component controlComponent = null; private Panel panel; private int videoWidth = 0; private int videoHeight = 0; private int controlHeight = 30; private int insetWidth = 10; private int insetHeight = 30; public PlayVideo(String filePath) { this.FilePath = filePath; } public void play(){ f = new Frame(Title); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { if(player != null) { player.close(); } System.exit(0); } }); f.setSize(500,400); f.setVisible(true); URL url = null; try { url = new URL(FilePath); } catch (MalformedURLException e) { e.printStackTrace(); } try { player = Manager.createPlayer(url); } catch (NoPlayerException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } player.addControllerListener(this); player.realize(); } public void controllerUpdate(ControllerEvent ce) { if (ce instanceof RealizeCompleteEvent) { //player实例化完成后进行player播放前预处理 player.prefetch(); } else if (ce instanceof PrefetchCompleteEvent) { if (videoComponent != null) return; if ((videoComponent = player.getVisualComponent()) != null) { Dimension size = videoComponent.getPreferredSize(); videoWidth = size.width; videoHeight = size.height; f.add(videoComponent); } else { videoWidth = 320; } if ((controlComponent = player.getControlPanelComponent()) != null) { controlHeight = controlComponent.getPreferredSize().height; f.add(controlComponent, BorderLayout.SOUTH); } f.setSize(videoWidth + insetWidth, videoHeight + controlHeight + insetHeight); f.validate(); player.start(); } else if (ce instanceof EndOfMediaEvent) { player.stop(); } } }