JAVA 相对路径取不到文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 相对路径取不到文件?相关的知识,希望对你有一定的参考价值。

import javax.swing.*;
import java.net.URL;
import java.applet.*;

public class DisplayImagePlayAudio extends JApplet
private AudioClip audioClip;

public DisplayImagePlayAudio()
URL urlForImage = getClass().getResource("/image/denmark.gif");
add(new JLabel(new ImageIcon(urlForImage)));

URL urlForAudio = getClass().getResource("/audio/denmark.mid");
audioClip = Applet.newAudioClip(urlForAudio);
audioClip.loop();


public void start()
if (audioClip != null) audioClip.loop();


public void stop()
if (audioClip != null) audioClip.stop();


/** Main method */
public static void main(String[] args)
// Create a frame
JFrame frame = new JFrame("DisplayImagePlayAudio");

// Create an instance of the applet
DisplayImagePlayAudio applet = new DisplayImagePlayAudio();
applet.init();

// Add the applet instance to the frame
frame.add(applet, java.awt.BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// Display the frame
frame.setSize(200, 500);
frame.setVisible(true);



报错:Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at DisplayImagePlayAudio.<init>(DisplayImagePlayAudio.java:11)
at DisplayImagePlayAudio.main(DisplayImagePlayAudio.java:32)

PS: 我的audio文件夹和image文件夹是和src同级目录

既然是相对路径"/image/denmark.gif"这个表示就不对了路径最前面加/表示的是绝对路径,你将
"/image/denmark.gif" 改为"image/denmark.gif"试试看
"/audio/denmark.mid"改为"audio/denmark.mid"
试试看吧!追问

试过了。。也不行

追答

URL urlForImage = getClass().getResource("/image/denmark.gif");
换成URL urlForImage = this.getClass().getClassLoader().getResource("image/denmark.gif");
URL urlForAudio = getClass().getResource("/audio/denmark.mid");
换成URL urlForAudio = this.getClass().getClassLoader().getResource("audio/denmark.mid");
试试看

我把你的程序复制出来运行是没问题的啊!你是用eclipse编写的么?

我把你程序导入eclipse里运行了错误一样,你需要把audio和image文件夹放入到src目录下才能找到文件,文件需要和源文件在同一目录下,以后导入你要的文件时先选中src后再导入,就在同一目录下了!

参考技术A B中的类会读取其配置文件,new File但是调用B的类时候找不到配置文件把读取的代码改下 文件的路径可以用追问

B中的类?
是指 DisplayImagePlayAudio 这个类吗?
读取的代码怎么改呢?

参考技术B 首先,你的此程序文件是是否在src目录下,如果是 就用 URL urlForImage = getClass().getResource("../image/denmark.gif"); 其他类似,如果不是请先将你的此程序文件目录报出来,否则,无解,希望能帮到你。追问

谢谢了,程序文件是在src下面
刚试了把image和audio文件夹放在bin目录下就ok了。。

C语言里面如何设置相对路径

比如:
函数fp=fopen("C:\\sample.txt","r")
如何直接变成当前相对路径?
好像不能用fp=fopen("..\\sample.txt","r"),执行结果是找不到文件。

可以用相对路径 ..\是当前路径的上一级路径,如果要取当前路径的文件,应给用 .\

比如

fp=fopen(".\\sample.txt","r")
或者直接
fp=fopen("sample.txt","r")

而且,当前路径最好用 GetCurrentDirectory检查一下,是否正确了。

如果是控制台程序,当前路径应该是你敲入命令行的路径
参考技术A 用fp=fopen("sample.txt","r")就可以了

以上是关于JAVA 相对路径取不到文件?的主要内容,如果未能解决你的问题,请参考以下文章

maven项目只能读到绝对路径下的文件,读不到相对路径下的文件

java怎么取到web服务的根路径

C语言里面如何设置相对路径

idea获取java类的相对路径,然后打包后运行出错的问题

java web项目 相对路径怎么写

Java相对路径读取文件