Never having seen that exception I'm on uncertain ground here. Though I don't like your use of 'continue' there is nothing that stands out to me as being wrong. Points :-
1) You would do better to use File#listFiles() rather than File#list() since this would return you an array of files. It is usually better to work with File objects than String
objects when dealing with files. Note that the return list can be 'null' so make sure you handle that.
2) Having never used it in this scenario I'm not sure what happens creating the entry name of f.getPath(). I always use f.getCanonicalPath() and strip off the first N characters when N is the length of the root.getCanonicalPath(). Example -
3) I seem to remember that the path separator in zip files is always '/' but I can't be sure.