Я пытаюсь создать текстуру Gdx с файлом изображения, расположенным в общей папке на моем ПК. Код хорошо работает в настольном приложении (но он работает и без использования SmbFile...), но вылетает в приложении для Android. Я получаю сообщение об ошибке «Нет такого файла или каталога». Кто-нибудь знает, как мы можем это сделать? Спасибо !
public void create () {
Gdx.app.setLogLevel(Application.LOG_DEBUG);
batch = new SpriteBatch();
SmbFile file=null;
try {
file = new SmbFile("smb://***path to shared folder***/icon-152.png");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
FileHandle fileHandle;
fileHandle = new FileHandle(file.getUncPath());
img = new Texture(fileHandle); //***No such file or directory***
//img = new Texture(Gdx.files.external(file.getUncPath())); //***No such file or directory***
}
Дополнение: я пытался скопировать файл в активы, прежде чем загружать его как текстуру. Все еще работает нормально в настольном приложении, но все еще имеет ошибку в приложении для Android: Java.io.FiliNotFound Exception.
public void create () {
Gdx.app.setLogLevel(Application.LOG_DEBUG);
batch = new SpriteBatch();
SmbFile file=null;
try {
file = new SmbFile("smb://***path to shared folder***/icon-152.png");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
InputStream is = null;
OutputStream os = null;
try {
is = new FileInputStream(file.getUncPath());
os = new FileOutputStream("test.png");
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
is.close();
os.close();
}
catch(java.io.IOException e){
Gdx.app.log("", e.getMessage()); //***Java.io.FileNotFound Exception***
}
img = new Texture("test.png"); //***No such file or directory***
}
1 ответ
Да Николас,
Я, наконец, сделал это, сначала скопировав файл в локальный. Он работает как на Android, так и на настольном приложении. Если кому интересно, две функции loadFile и saveFile :
loadFile( "//***path to shared folder***/icon-152.png","icon-152.png");
saveFile("icon-152.png", "//HP2285/***path to shared folder***/icon-152.png");
}
public void loadFile(String smbFilePath, String fileName){
try {
SmbFile file = new SmbFile("smb:"+smbFilePath);
InputStream is = new SmbFileInputStream(file);
FileHandle fhd = Gdx.files.local(fileName);
OutputStream os = fhd.write(false);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
is.close();
os.close();
}
catch(Exception e){
}
}
public void saveFile(String fileName, String smbFilePath){
try {
SmbFile file = new SmbFile("smb:"+smbFilePath);
OutputStream os = new SmbFileOutputStream(file);
FileHandle fhs = Gdx.files.local(fileName);
InputStream is = fhs.read();
byte[] buffer = new byte[1024];
int length;
while ((length = is.read (buffer)) > 0) {
os.write(buffer, 0, length);
}
is.close();
os.close();
}
catch(Exception e){
}
}
Похожие вопросы
Новые вопросы
libgdx
libGDX — это кроссплатформенная среда разработки Java-игр с открытым исходным кодом, основанная на OpenGL (ES), которая работает в браузерах с поддержкой Windows, Linux, Mac OS X, Android, iOS и WebGL.
smb://*
на Android. Может быть, вы могли бы попробовать создать подклассFileHandle
, чтобы обернутьSmbFile
, который, как я полагаю, имеет доступ к общим папкам? У меня нет опыта работы с SMB, поэтому я не могу сказать.