Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么printWorkingDirectory()只返回根目录?_Java_Android_Apache_Ftp - Fatal编程技术网

Java 为什么printWorkingDirectory()只返回根目录?

Java 为什么printWorkingDirectory()只返回根目录?,java,android,apache,ftp,Java,Android,Apache,Ftp,我试图使用Apache Commons FTP中的printWorkingDirectory(),但不管我实际在哪个目录中,它只返回根目录“/”。我可以浏览目录,列出文件等。当我上传一个文件时,它会上传到ftp,无论上传文件时我在哪个目录,它都会上传到根目录。当我长时间点击一个本地文件时,它会触发一个上传对话框 public boolean ftpConnect(String host, String username, String password, int

我试图使用Apache Commons FTP中的printWorkingDirectory(),但不管我实际在哪个目录中,它只返回根目录“/”。我可以浏览目录,列出文件等。当我上传一个文件时,它会上传到ftp,无论上传文件时我在哪个目录,它都会上传到根目录。当我长时间点击一个本地文件时,它会触发一个上传对话框

    public boolean ftpConnect(String host, String username, String password,
            int port) {
        try {
            mFTPClient = new FTPClient();
            // connecting to the host
            mFTPClient.connect(host, port);

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

                /*
                 * Set File Transfer Mode
                 * 
                 * To avoid corruption issue you must specified a correct
                 * transfer mode, such as ASCII_FILE_TYPE, BINARY_FILE_TYPE,
                 * EBCDIC_FILE_TYPE .etc. Here, I use BINARY_FILE_TYPE for
                 * transferring text, image, and compressed files.
                 */
                mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
                mFTPClient.enterLocalPassiveMode();

                ftpPrintFilesList(ftpGetCurrentWorkingDirectory());
                return status;
            }
        } catch (Exception e) {
            // Log.d(TAG, "Error: could not connect to host " + host );
        }

        return false;
    }

    public boolean ftpDisconnect() {
        try {
            mFTPClient.logout();
            mFTPClient.disconnect();
            return true;
        } catch (Exception e) {
            // Log.d(TAG,
            // "Error occurred while disconnecting from ftp server.");
        }

        return false;
    }

    public String ftpGetCurrentWorkingDirectory() {
        try {
            String workingDir = mFTPClient.printWorkingDirectory(); 
            return workingDir;
        } catch (Exception e) {
            Log.i("Error working dir", e.toString());
        }

        return null;
    }

    public boolean ftpChangeDirectory(String directory_path) {
        try {
            if (mFTPClient.changeWorkingDirectory(directory_path))
                return true;
        } catch (Exception e) {
            Log.i("directory path", directory_path);
        }

        return false;
    }

    public boolean ftpUpload(String srcFilePath, String desFileName,
            String desDirectory) {
        boolean status = false;
        try {
            FileInputStream srcFileStream = new FileInputStream(srcFilePath);

            // change working directory to the destination directory
            if (ftpChangeDirectory(desDirectory)) {
                status = mFTPClient.storeFile(desFileName, srcFileStream);
            }
            showServerReply(mFTPClient);
            srcFileStream.close();
            return status;
        } catch (Exception e) {
            Log.i("Error", e.toString());
        }

        return status;
    }

    public void l_Show_Alert_box(Context context, String message, int position) {
        final String selectedFileString = l_directoryEntries.get(position)
                .getText();
        final File tmpFile = new File(selectedFileString);
        final String fname = tmpFile.getName();
        String btn;
        final AlertDialog alertDialog = new AlertDialog.Builder(context)
                .create();

        if (tmpFile.isDirectory()) {
            btn = "Make Directory";
            alertDialog.setIcon(R.drawable.newfolder);
            alertDialog.setTitle(getString(R.string.mkdir));

            alertDialog.setButton(btn, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    ftpMakeDirectory("/" + fname);
                    map.clear();
                    r_directoryEntries.clear();
                    r_itla.notifyDataSetChanged();
                    ftpPrintFilesList(ftpGetCurrentWorkingDirectory());
                    return;
                }

            });
        } else {
            btn = "Upload";
            alertDialog.setIcon(R.drawable.upload);
            alertDialog.setTitle(getString(R.string.upload));
            alertDialog.setButton(btn, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    String cd;
                    try {
                        cd = mFTPClient.printWorkingDirectory().toString(); // Debug shows the working dir as being "/"
                        //ftpUpload(currenLocalFile.getPath(), "test.txt", cd);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    map.clear();
                    r_directoryEntries.clear();
                    r_itla.notifyDataSetChanged();
                    ftpPrintFilesList(ftpGetCurrentWorkingDirectory());
                    return;
                }

            });
        }
        alertDialog.setButton2("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                alertDialog.dismiss();
            }
        });

        alertDialog.setMessage(message);
        alertDialog.show();
    }


}
为什么printWorkingDirectory()没有返回正确的目录?

Q:“为什么printWorkingDirectory()没有返回正确的目录?”

答:因为它实际上是在返回正确的目录。你的期望是有缺陷的

您需要创建一个文件对象,该对象指向您希望进行工作的位置。您可以使用.getPath()或getName()等来获取所需的字符串

File workingDir = new File("/do/my/work/here");

查看官方文档

您需要调用
changeWorkingDirectory(stringpathname)
方法来更改工作目录,否则它将保留在根目录中