Java Can';t写入连接到URLConnection的BufferedOutputStream
我正在尝试使用URLConnection将文件上载到FTP服务器。没有抛出异常。我似乎能够连接到服务器。如果我“手动”(使用FTP客户端)上传文件,我可以毫无问题地下载该文件(使用另一个程序) 我使用BufferedOutputStream.write(int)。日志显示我可以读取本地文件(包含“Hej-Hej”)并访问其中的字节。问题是:没有向服务器文件写入任何内容。当我在服务器上读取文件时,它仍然包含预上传的内容。该文件未更新。我尝试了BufferedOutputStream.write(String.getBytes()),但没有帮助Java Can';t写入连接到URLConnection的BufferedOutputStream,java,android,ftp,urlconnection,Java,Android,Ftp,Urlconnection,我正在尝试使用URLConnection将文件上载到FTP服务器。没有抛出异常。我似乎能够连接到服务器。如果我“手动”(使用FTP客户端)上传文件,我可以毫无问题地下载该文件(使用另一个程序) 我使用BufferedOutputStream.write(int)。日志显示我可以读取本地文件(包含“Hej-Hej”)并访问其中的字节。问题是:没有向服务器文件写入任何内容。当我在服务器上读取文件时,它仍然包含预上传的内容。该文件未更新。我尝试了BufferedOutputStream.write(S
static public void upload(String string, String file) {
File file_ = new File(Environment.getExternalStorageDirectory() + "/Android/data/org.sionlinkoping.pingstprayer/files/thanks.txt");
try {
upload("ftphome.mah.se", user, passwd, "thanks.txt", file_);
}
catch(Exception e) { Log.d("",e.toString()); }
}
static public void upload( String ftpServer, String user, String password,
String fileName, File source ) throws MalformedURLException,
IOException
{
if (ftpServer != null && fileName != null && source != null)
{
StringBuffer sb = new StringBuffer( "ftp://" );
// check for authentication else assume its anonymous access.
if (user != null && password != null)
{
sb.append( user );
sb.append( ':' );
sb.append( password );
sb.append( '@' );
}
sb.append( ftpServer );
sb.append( '/' );
sb.append( fileName );
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try
{
URL url = new URL( sb.toString() );
URLConnection urlc = url.openConnection();
bos = new BufferedOutputStream( urlc.getOutputStream() );
bis = new BufferedInputStream( new FileInputStream( source ) );
int i;
// read byte by byte until end of stream
while ((i = bis.read()) != -1)
{
Log.d("","i:"+i);
bos.write( i );
}
bos.flush();
}
finally
{
if (bis != null)
try
{
bis.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
if (bos != null)
try
{
bos.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
else
{
System.out.println( "Input not available." );
}
}
日志显示:
01-07 14:00:50.662: DEBUG/(6925): i:239
01-07 14:00:50.662: DEBUG/(6925): i:187
01-07 14:00:50.662: DEBUG/(6925): i:191
01-07 14:00:50.662: DEBUG/(6925): i:72
01-07 14:00:50.662: DEBUG/(6925): i:101
01-07 14:00:50.662: DEBUG/(6925): i:106
01-07 14:00:50.662: DEBUG/(6925): i:32
01-07 14:00:50.662: DEBUG/(6925): i:104
01-07 14:00:50.662: DEBUG/(6925): i:101
01-07 14:00:50.662: DEBUG/(6925): i:106
01-07 14:00:50.672: DEBUG/(6925): i:10
问题在于您假设写入FTP URL将导致文件保存到服务器。不会的。结果只是没有定义——它不是这样工作的
有可用的FTP库;你需要用一个。例如,请参见Ok,但文件已经存在。我只是想补充一下。还需要一个库吗?你需要一个库(如果你是受虐狂的话,也可以编写自己的库,使用FTP协议规范)来处理FTP。啊哈!这是Java特有的事实吗?我正在开发的这个程序应该是Android应用程序。我之前在Objective-C中为iPhone编写了相同的应用程序,那么我似乎不需要任何额外的库?也许Objective-C有这样的标准功能或其他什么?顺便说一句,我仍然可以在FTP服务器上读取文件,而不必使用库。“这是Java特有的事实吗?”我想是的。没有任何法律规定其他平台的实现不能使其
URLConnection
等效平台能够处理ftp上传。但Java的设计并不是这样的,无论如何——它是只读的。