0

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() が正しいディレクトリを返さないのはなぜですか?

4

2 に答える 2

1

メソッドを呼び出して作業ディレクトリを変更する必要がありますchangeWorkingDirectory(String pathname)。そうしないと、ルートにとどまります。

于 2013-05-02T03:01:15.850 に答える