Java Android上的FTP上传和下载

Java Android上的FTP上传和下载,java,android,ftp,Java,Android,Ftp,我在设置INTERNET\u访问等后出现此错误 private class AsyncUpload extends AsyncTask<String, Void, Void>{ public void ftpUpload(){ FTPClient con = new FTPClient(); try { con.connect("ftp.194.90.81.149"); //here i

我在设置INTERNET\u访问等后出现此错误

 private class AsyncUpload extends AsyncTask<String, Void, Void>{       
    public void ftpUpload(){
        FTPClient con = new FTPClient();
        try
        {

            con.connect("ftp.194.90.81.149"); //here i recieve exception
                //the exception is java.unknownhostexception
                //java.net.UnknownHostException: Unable to resolve host "ftp.194.90.81.149": No address associated with hostname
            if (con.login("username", "password"))
            {
                con.enterLocalPassiveMode(); 
                String data = "test data";
                ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());
                boolean result = con.storeFile("/test.jpg", in);
                in.close();
                if (result) Log.v("upload result", "succeeded");
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }


        try
        {
            con.logout();
            con.disconnect();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    @Override
    protected Void doInBackground(String... params) {
        ftpUpload();
        return null;
    }
}
私有类AsyncUpload扩展了AsyncTask{
公共无效ftpUpload(){
FTPClient con=新的FTPClient();
尝试
{
con.connect(“ftp.194.90.81.149”);//这里我收到了异常
//例外情况是java.unknownhostexception
//java.net.UnknownHostException:无法解析主机“ftp.194.90.81.149”:没有与主机名关联的地址
if(con.login(“用户名”、“密码”))
{
con.enterLocalPassiveMode();
String data=“测试数据”;
ByteArrayInputStream in=新的ByteArrayInputStream(data.getBytes());
布尔结果=con.storeFile(“/test.jpg”,in);
in.close();
if(result)Log.v(“上传结果”,“成功”);
}
}
捕获(例外e)
{
e、 printStackTrace();
}
尝试
{
con.logout();
con.disconnect();
}
捕获(IOE异常)
{
e、 printStackTrace();
}
}
@凌驾
受保护的Void doInBackground(字符串…参数){
ftpUpload();
返回null;
}
}
这里是我已经测试过的代码的另一部分,并且仍然收到该异常

public class FTPFactory {
private FTPClient _ftpClient = null;

public boolean Connect(String host, String userName, String password, int port) throws IOException
{
    try {

        _ftpClient = new FTPClient();   

        // connecting to the host           
        _ftpClient.connect(host, port);

        // now check the reply code, if positive mean connection success
        if (FTPReply.isPositiveCompletion(_ftpClient.getReplyCode())) {             
            // login using username & password
            boolean status = _ftpClient.login(userName, password);
            return status;
        }

    } catch(IOException e) {
        throw e;
    }       
    return false;
}

public boolean Disconnect()
{
    try {
        _ftpClient.logout();
        _ftpClient.disconnect();
        return true;
    } catch (Exception e) {

    }

    return false;
}

public boolean ChangeDirectory(String directoryPath)
{
    try {
        _ftpClient.changeWorkingDirectory(directoryPath);
    } catch(Exception e) {

    }

    return false;
}


public String GetCurrentWorkingDirectory()
{
    try {
        String workingDir = _ftpClient.printWorkingDirectory();
        return workingDir;
    } catch(Exception e) {

    }

    return null;
}

public void PrintFilesList(String dirPath)
{
    try {
        FTPFile[] ftpFiles = _ftpClient.listFiles(dirPath);
        int length = ftpFiles.length;

        for (int i = 0; i < length; i++) {
            String name = ftpFiles[i].getName();
            boolean isFile = ftpFiles[i].isFile();

            if (isFile) {

            }
            else {

            }
        }
    } catch(Exception e) {
        e.printStackTrace();
    }
}

public boolean MakeDirectory(String newDirPath)
{
    try {
        boolean status = _ftpClient.makeDirectory(newDirPath);
        return status;
    } catch(Exception e) {

    }
    return false;
}


public boolean RemoveDirectory(String dirPath)
{
    try {
        boolean status = _ftpClient.removeDirectory(dirPath);
        return status;
    } catch(Exception e) {

    }
    return false;
}

public boolean RemoveFile(String filePath)
{
    try {
        boolean status = _ftpClient.deleteFile(filePath);
        return status;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}

public boolean RenameFile(String from, String to)
{
    try {
        boolean status = _ftpClient.rename(from, to);
        return status;
    } catch (Exception e) {

    }
    return false;
}


/**
 * mFTPClient: FTP client connection object (see FTP connection example)
 * srcFilePath: path to the source file in FTP server
 * desFilePath: path to the destination file to be saved in sdcard
 */
public boolean Download(String srcFilePath, String desFilePath)
{
    boolean status = false;
    try {
        FileOutputStream desFileStream = new FileOutputStream(desFilePath);;
        status = _ftpClient.retrieveFile(srcFilePath, desFileStream);
        desFileStream.close();

        return status;
    } catch (Exception e) {

    }

    return status;
}

/**
 * mFTPClient: FTP client connection object (see FTP connection example)
 * srcFilePath: source file path in sdcard
 * desFileName: file name to be stored in FTP server
 * desDirectory: directory path where the file should be upload to
 */
public boolean Upload(String srcFilePath, String desFileName, String desDirectory)
{
    boolean status = false;
    try {
        FileInputStream srcFileStream = new FileInputStream(srcFilePath);

        // change working directory to the destination directory
        if (ChangeDirectory(desDirectory)) {
            status = _ftpClient.storeFile(desFileName, srcFileStream);
        }

        srcFileStream.close();
        return status;
    } catch (Exception e) {

    }

    return status;
}    
公共级FTP工厂{
私有FTPClient _FTPClient=null;
公共布尔连接(字符串主机、字符串用户名、字符串密码、int端口)引发IOException
{
试一试{
_ftpClient=新的ftpClient();
//连接到主机
_ftpClient.connect(主机、端口);
//现在检查回复代码,如果是肯定的,则表示连接成功
如果(FTPReply.isPositiveCompletion(ftpClient.getReplyCode()){
//使用用户名和密码登录
布尔状态=ftpClient.login(用户名、密码);
返回状态;
}
}捕获(IOE异常){
投掷e;
}       
返回false;
}
公共布尔断开连接()
{
试一试{
_ftpClient.logout();
_ftpClient.disconnect();
返回true;
}捕获(例外e){
}
返回false;
}
公共布尔更改目录(字符串目录路径)
{
试一试{
_ftpClient.changeWorkingDirectory(directoryPath);
}捕获(例外e){
}
返回false;
}
公共字符串GetCurrentWorkingDirectory()
{
试一试{
字符串workingDir=\u ftpClient.printWorkingDirectory();
返回工作目录;
}捕获(例外e){
}
返回null;
}
公共无效打印文件列表(字符串dirPath)
{
试一试{
FTPFile[]ftpFiles=\u ftpClient.listFiles(dirPath);
int length=ftpFiles.length;
for(int i=0;i
}

您收到的未知主机名异常意味着ftp.194.90.81.149在DNS中不是真正的主机名。我怀疑数字部分是你真正想要的。也就是说,尝试将该行更改为

con.connect("194.90.81.149");

未知主机异常意味着您缺少internet权限,或者您未连接到internet,或者可能是您的ftp url错误。

我认为ftp url格式不正确,请检查一下。您应该发布问题的堆栈跟踪。但似乎你给你的FTPC客户端提供了一个坏的连接字符串。我已经测试了所有可能的变体。你能帮我吗?我已经测试了这个变体,但仍然没有结果。我怎么知道我做的每件事都是对的呢?哦,唐,首先非常感谢你的帮助,还有关于e
con.connect("194.90.81.149");