The accused man has been given strict court-imposed bail conditions, and will appear on Monday in the Queenstown District Court.
The victim, Jordan Sinke, remains in Dunedin Hospital.
When he is well enough, police hope to speak with him about the incident.
Although an arrest has been made, police would like to hear from anyone who either witnessed the incident or has information about it. Anyone with any information can contact Queenstown Police on 441 1600 or call Police anonymously on the Crimestoppers.