抛出找不到文件异常
Throws file not found Exceptions
我在 android 项目的资产文件夹中创建了一个 gfx 文件夹。我存储了将在我的游戏中使用 android 的图像。由于我需要传递图像高度和图像宽度,将其转换为 andEngine 中最接近的最高功率 2,因此我创建了一个 ImageUtility class 来读取 gfx 文件夹中的图像并获取其高度和宽度。
package org.ujjwal.androidGameUtility;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageUtilities {
private static final String ABSOLUTE_PATH = "F:\Games\TowerOfHanoi\assets\gfx\";
private String fileName = "";
private File imageFile;
private int imageHeight;
private int imageWidth;
public ImageUtilities(String filename){
this.fileName = filename;
this.imageFile = new File(ABSOLUTE_PATH + this.fileName);
try {
processImage();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* this methods set the doucment relative path for the graphics to be used
* and it is mandotry to call before using ImageUtilties object else it will throw filenotFoundException
*
* @param path
*/
private void processImage() throws FileNotFoundException{
if(imageFile.exists()){
try {
BufferedImage image = ImageIO.read(this.imageFile);
this.imageWidth = image.getWidth();
this.imageHeight = image.getHeight();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else{
throw new FileNotFoundException("Either you missed typed filename or haven't called setAssetBasePathMethod setImageBasePath(String path) method");
}
}
public int getImageHeight(){
return this.imageHeight;
}
public int getImageWidth(){
return this.imageWidth;
}
public String getFileName(){
return this.fileName;
}
public File getImageFile(){
return this.imageFile;
}
}
我总是收到带有上述错误消息的 FileNotFoundException。奇怪的问题是当我从其他 java class 访问图像文件时,我没有收到任何错误。我打印的高度和宽度都完全符合我的要求,但我无法从我的 android 游戏项目访问相同的图像文件。这是什么错误。我为图像提供了绝对文件路径。我还尝试比较它们相同的文件路径。请告诉我我遇到了什么错误,我花了一整天的时间试图弄清楚但是...
@mittmemo 说的对,你不能从你的 phone 或模拟器访问 F 驱动器。您的计算机和 android 是两个不同的 OS。您可以做的不是将文件放在 /assets 中,而是将其放在资源目录下的 /raw 中。然后您可以使用以下方式访问它:
try {
Resources res = getResources();
InputStream in_s = res.openRawResource(R.raw.yourfile);
byte[] b = new byte[in_s.available()];
in_s.read(b);
String str = new String(b);
} catch (Exception e) {
Log.e(LOG_TAG, "File Reading Error", e);
}
我在 android 项目的资产文件夹中创建了一个 gfx 文件夹。我存储了将在我的游戏中使用 android 的图像。由于我需要传递图像高度和图像宽度,将其转换为 andEngine 中最接近的最高功率 2,因此我创建了一个 ImageUtility class 来读取 gfx 文件夹中的图像并获取其高度和宽度。
package org.ujjwal.androidGameUtility;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageUtilities {
private static final String ABSOLUTE_PATH = "F:\Games\TowerOfHanoi\assets\gfx\";
private String fileName = "";
private File imageFile;
private int imageHeight;
private int imageWidth;
public ImageUtilities(String filename){
this.fileName = filename;
this.imageFile = new File(ABSOLUTE_PATH + this.fileName);
try {
processImage();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* this methods set the doucment relative path for the graphics to be used
* and it is mandotry to call before using ImageUtilties object else it will throw filenotFoundException
*
* @param path
*/
private void processImage() throws FileNotFoundException{
if(imageFile.exists()){
try {
BufferedImage image = ImageIO.read(this.imageFile);
this.imageWidth = image.getWidth();
this.imageHeight = image.getHeight();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else{
throw new FileNotFoundException("Either you missed typed filename or haven't called setAssetBasePathMethod setImageBasePath(String path) method");
}
}
public int getImageHeight(){
return this.imageHeight;
}
public int getImageWidth(){
return this.imageWidth;
}
public String getFileName(){
return this.fileName;
}
public File getImageFile(){
return this.imageFile;
}
}
我总是收到带有上述错误消息的 FileNotFoundException。奇怪的问题是当我从其他 java class 访问图像文件时,我没有收到任何错误。我打印的高度和宽度都完全符合我的要求,但我无法从我的 android 游戏项目访问相同的图像文件。这是什么错误。我为图像提供了绝对文件路径。我还尝试比较它们相同的文件路径。请告诉我我遇到了什么错误,我花了一整天的时间试图弄清楚但是...
@mittmemo 说的对,你不能从你的 phone 或模拟器访问 F 驱动器。您的计算机和 android 是两个不同的 OS。您可以做的不是将文件放在 /assets 中,而是将其放在资源目录下的 /raw 中。然后您可以使用以下方式访问它:
try {
Resources res = getResources();
InputStream in_s = res.openRawResource(R.raw.yourfile);
byte[] b = new byte[in_s.available()];
in_s.read(b);
String str = new String(b);
} catch (Exception e) {
Log.e(LOG_TAG, "File Reading Error", e);
}